덱(Deque)

Untitled

특징

정의

Deque Method

구현

public class DequeExample {
    public static void main(String[] args) {
        Deque deque = new Deque();
        
        // 앞에 요소 추가
        deque.addFirst(10);
        deque.addFirst(20);
        
        // 뒤에 요소 추가
        deque.addLast(30);
        deque.addLast(40);
        
        // 덱 출력
        deque.printDeque(); // 20 10 30 40
        
        // 앞에서 요소 삭제
        System.out.println(deque.removeFirst()); // 20
        System.out.println(deque.removeFirst()); // 10
        
        // 뒤에서 요소 삭제
        System.out.println(deque.removeLast()); // 40
        
        // 덱이 비어있는지 확인
        System.out.println(deque.isEmpty()); // false
    }
}

class Deque {
    private Node head;
    private Node tail;
    
    public Deque() {
        this.head = null;
        this.tail = null;
    }
    
    // 앞에 요소 추가
    public void addFirst(int data) {
        Node newNode = new Node(data);
        
        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            newNode.next = head;
            head.previous = newNode;
            head = newNode;
        }
    }
    
    // 뒤에 요소 추가
    public void addLast(int data) {
        Node newNode = new Node(data);
        
        if (tail == null) {
            head = newNode;
            tail = newNode;
        } else {
            newNode.previous = tail;
            tail.next = newNode;
            tail = newNode;
        }
    }
    
    // 앞에서 요소 삭제
    public int removeFirst() {
        if (isEmpty()) {
            throw new IllegalStateException("Deque is empty.");
        }
        
        int removedData = head.data;
        
        if (head == tail) {
            head = null;
            tail = null;
        } else {
            head = head.next;
            head.previous = null;
        }
        
        return removedData;
    }
    
    // 뒤에서 요소 삭제
    public int removeLast() {
        if (isEmpty()) {
            throw new IllegalStateException("Deque is empty.");
        }
        
        int removedData = tail.data;
        
        if (head == tail) {
            head = null;
            tail = null;
        } else {
            tail = tail.previous;
            tail.next = null;
        }
        
        return removedData;
    }
    
    // 덱이 비어있는지 확인
    public boolean isEmpty() {
        return (head == null && tail == null);
    }
    
    // 덱 출력
    public void printDeque() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }
}

class Node {
    int data;
    Node previous;
    Node next;
    
    public Node(int data) {
        this.data = data;
        this.previous = null;
        this.next = null;
    }
}