[자료구조] 큐 (Queue) with Python
이 글은 자료구조 중 큐에 관한 기록입니다.
개념
- 큐(queue) : 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 데이터 구조
- 큐는 FIFO 또는 LILO 데이터 방식을 따릅니다.
- FIFO(First In First Out) : 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 데이터 관리 정책
- LILO(Last In Last Out) : 가장 나중에 넣은 데이터를 가장 나중에 꺼내는 데이터 관리 정칙
- 큐는 한쪽 끝에서만 데이터를 넣을 수 있고 다른 한쪽 끝에서만 데이터를 뺄 수 있는 구조를 가집니다.
종류
- 선형 큐 (Linear Queue)
- 환형 큐 (Circular Queue)
- 우선순위 큐 (Priority Queue)
활용
- 스트리밍(streaming)
- 너비 우선 탐색(breath first search ; bfs)
Abstract Data Type ; ADT
enqueue()
: 맨 뒤에 값을 추가 (큐에 데이터를 넣기)dequeue()
: 맨 앞의 값을 제거 (큐에서 데이터를 꺼내기)peek()
: 맨 앞(front
)의 값을 출력front()
: 큐의 맨 앞 인덱스rear()
: 큐의 맨 뒤 인덱스isEmpty()
: 큐가 비어 있는지 여부를 반환- 선형 큐에서,
front=rear
이면True
반환
- 선형 큐에서,
isFull()
: 큐가 꽉 차 있는지 여부를 반환- 선형 큐에서,
rear=n-1
이면True
반환
- 선형 큐에서,
Implementation with Python
list
사용하기collections
모듈의deque
사용하기queue
모듈의Queue
사용하기
1. list
사용하기
class ListQueue(object):
def __init__(self):
self.queue = []
def dequeue(self):
if len(self.queue)==0:
return -1
return self.queue.pop(0)
def enqueue(self, x):
self.queue.append(x)
def printQueue(self):
print(self.queue)
2. collections
모듈의 deque
사용하기
from collections import deque
# 큐 선언
dq = deque([])
# 큐에 데이터를 넣기
dq.append(1)
dq.append(2)
dq.append(3)
dq.append(4)
print(dq)
# 큐에서 데이터를 꺼내기
dq.popleft() # 1
dq.popleft() # 2
from collections import deque
class DequeQueue(deque):
def enqueue(self, x):
super().append(x)
def dequeue(self):
super().popleft()
def display(self):
for node in self.__iter__():
print(node)
3. queue
모듈의 Queue
사용하기
queue
모듈의 Queue
객체는 다음과 같은 메서드를 갖습니다.
queue.qsize()
:queue
의 크기 반환queue.empty()
:queue
가 비어 있으면True
, 비어 있지 않으면False
반환queue.full()
:queue
가 꽉 차 있으면True
, 꽉 차 있지 않으면False
반환queue.put(item)
:queue
에item
을 추가queue.get()
:queue
에서item
을 제거하고item
을 반환
from queue import Queue
# 큐 선언
q = Queue()
# 큐에 데이터를 넣기
q.put(1)
q.put(2)
q.put(3)
q.put(4)
# 큐에서 데이터를 꺼내기
q.get() # 1
q.get() # 2
댓글남기기