자료구조

[자료구조] deque - 양방향 큐

비번변경 2023. 10. 18. 21:56

개요

예전에 Python에서 큐를 다루는 방법을 소개하고자 2021.10.07 - [자료 구조] 회문 찾기 / 큐 & 스택을 작성했었는데, 찾아보니 deque라는 자료구조가 따로 존재해 내용을 적어둔다.

 

 

양방향 큐 (deque)

Queue는 먼저 저장한 자료를 먼저 빼내는 선입선출(First In First Out; FIFO) 방식의 자료구조다. REAR에서민 자료를 추가하고 FRONT에서만 자료를 삭제하기 때문에 방향을 구분하지 않는다.

반면 양방향 큐(Double-Ended Queue; deque)는 그 이름대로 데이터의 추가와 삭제가 FRONT, REAR 모두에서 이뤄진다. 즉, FIFO나 후입선출(Last In First Out; LIFO)를 따르지 않는다.

Deque는 기본적으로 동적 배열을 사용하고, Queue에 비해 시간 및 자원 활용 측면에서 효율적이다. 또한 자료구조 내 요소에 대한 임의 접근이 가능하다는 특징이 있다.

 

 

Deque 특징

  • 크기가 가변적이다.
  • FRONT, REAR에서의 데이터 추가, 삭제하기 좋은 반면 자료 구조 중간에 데이터를 추가하고 삭제하는 작업은 용이하지 않다.
  • 임의 접근이 가능하다.

 

 

Queue VS Deque

큐와 양방향 큐를 비교하면 다음과 같다.

Queue Deque
REAR에서 자료를 추가하고, FRONT에서 자료를 삭제하는 선형 데이터 구조  양쪽 끝에서 자료를 추가하고 제거하는 선형 데이터 구조
선입선출 선입선출, 후입선출 모두 가능
Array 또는 Linked List로 구현 Circular Array 또는 Doubly Linked List로 구현
우선순위 큐나 우선순위 스택을 구현하는데 사용 양방향 우선순위 큐나 순환 버퍼를 구현하는데 사용
enqueue, dequeue, peek, size 등의 기능 제공 addFirst, addLast, RemoveFirst, RemoveLast, peekFirst, peekLast 등의 기능 제공
iterator를 사용한 접근 미제공 iterator를 사용한 접근 제공
BFS(Breadth-First Search), 레벨 별 이진트리 인쇄 등이 알고리즘 예시가 될 수 있다. 슬라이딩 윈도우, 슬라이딩 윈도우의 최대/최솟값 유지 등이 알고리즘 예시가 될 수 있다.

 

 

 

 

참고 문서

https://www.geeksforgeeks.org/difference-between-queue-and-deque-queue-vs-deque/

https://www.educba.com/deque-vs-queue/ 

https://gamdekong.tistory.com/72