개인공부/자료구조

[자료구조] Queue

개바리여리 2025. 5. 29. 20:36

 

큐는 First in , First out 구조를 가진 (선입선출) 자료구조이다.

선형적으로 뒤에서 데이터가 들어와 앞으로 빠져나간다.

 

핵심 특징

삽입(Enqueue) 뒤에서 데이터 추가
삭제(Dequeue) 앞에서 데이터 제거
선입선출(FIFO) 먼저 들어간 게 먼저 나옴
순서 유지 데이터 삽입 순서가 유지됨

 

주된 활용 예시

 

- 마우스 / 키보드 이벤트 큐 구현에 사용

- KafKa , RabbitMQ 등 메시지 브로커에서 주로 사용

- 작업을 순차적으로 처리하는 비동기 처리에서 사

 

 

배열 기반으로 구현된 큐

 

 

배열 기반 큐는 삭제시에는 앞에 공간이 비어버리기 때문에 앞에 불필요한 공간이 생기게 된다. 선입선출 구조이기 때문에

앞에 빈 공간을 활용하지 못하는 경우가 있다.

 

원형 큐

원형의 형태로 배열을 구성하는 방법이다.

위와 같이 배열이 꽉 차버리면 어디서 앞이고 어디가 뒤인지 구별할 수 없게 된다.

그래서 일반적으로 원형큐는 꽉 채워서 구현하지 않는다.

 

 

연결 리스트 큐

 

연결 리스트를 활용하여 구현한 큐는 선행 데이터가 삭제되면 그냥 데이터를 지우고 노드들에 포인터들의 값들을

변경 시켜주면 된다.

이 구조는 동적 메모리 관리에 유리하고, 삽입/삭제 시 메모리 이동이 필요 없어 성능이 안정적

 

하지만 인덱스를 사용하지 않기 때문에 임의 접근이 불가능하다.

 

 

덱(Deque, Double-ended queue)

 

덱은 큐와 달리 선형적인 자료구조이지만 앞과 뒤 둘다에서 데이터의 삽입 삭제가 가능하다.

 

pushFront 앞에서 삽입
popFront 앞에서 제거
pushBack 뒤에서 삽입
popBack 뒤에서 제거

 

 

큐와 덱의 시간복잡도

구현방식 자료구조 삽입 삭제
배열 큐 O(1) (push) O(n) (shift)
배열 덱 O(1) (pushBack), O(n) (pushFront) O(1) (popBack), O(n) (popFront)
연결 리스트 큐 O(1) O(1)
연결 리스트 덱 O(1) O(1)

 

연결 리스트 기반은 head, tail 포인터만 잘 관리하면 모든 삽입/삭제가 O(1) 로 가능하다.