[JAVA/자료구조] 선형구조 - 덱(Deque)

경운·2025년 12월 21일

Data Structure

목록 보기
5/7
post-thumbnail

Deque

  • 덱(Deque)은 스택과 큐의 기능을 모두 가진 자료구조이며, 양쪽 끝에서 삽입과 삭제가 가능하다
  • 선입선출과, 후입선출의 특성을 가진다

덱의 동작 과정

데이터 추가

  • 새로운 데이터가 Front(앞) 또는 Rear(뒤) 양쪽 어디서든 들어갈 수 있음

rear & front

  • 큐와 위치는 같지만, 입구와 출구의 역할이 고정되지 않음

데이터 꺼내기

  • Front(앞) 또는 Rear(뒤) 양쪽 어디서든 데이터를 꺼낼 수 있음

  • 데이터 추가 : offerFirst() / offerLast()
    • offerFirst() - 덱의 맨 앞에 데이터를 추가
    • offerLast() - 덱의 맨 뒤에 데이터를 추가
  • 데이터 꺼내기 : pollFirst() / pollLast()
    • pollFirst() - 덱의 맨 앞에서 데이터를 제거하고 반환 / 덱이 비어 있으면 null 반환
    • pollLast() - 덱의 맨 뒤에서 데이터를 제거하고 반환 / 덱이 비어 있으면 null 반환
  • 데이터 확인하기 : peekFirst() / peekLast() - 데이터를 삭제하지 않음
    • peekFirst() - 덱의 맨 앞에서 데이터를 반환 / 덱이 비어 있으면 null 반환
    • peekLast() - 덱의 맨 뒤에서 데이터를 반환 / 덱이 비어 있으면 null 반환

💡 덱은 큐의 상위 호환으로 알고 있으면 쉽게 이해할 수 있다

  • 데이터를 추가할 때 add()
  • 데이터를 삭제할 때 remove() 사용해도 되지만 선언하는 것에 따라 다르다
  • ArrayDequeLinkedList 로 만들었다면 용량 제한이 없어서 에러가 발생하지 않지만 크기가 고정된 덱있다면 에러가 발생하기 때문에 offer(), poll(), peek()를 사용하는 게 좋다

덱 예시

Deque<자료형> deque = new LinkedList<>();

// 덱의 데이터 추가
deque.offerFirst("Apple");
deque.offerFirst("Banana");
deque.offerLast("Orange");
deque.offerLast("Grape");

// 덱의 데이터 꺼내기 - 첫번째 데이터 제거(Banana 삭제)
deque.pollFirst();  

덱 사용 예시

  • 회문 판별 - 앞, 뒤에서 읽었을 때 동일한 문자열을 검사할 때 사용

덱 장단점

  • 장점
    • 양쪽 끝에서 삽입과 삭제가 가능
  • 단점
    • 메모리 사용이 큼

0개의 댓글