큐 구조
- 줄은 서는 행위와 유사
- 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조, '선입선출' 구조의 자료구조
- FIFO(First In, First Out) 방식으로 스택과 꺼내는 순서가 반대
알아둘 용어
- Enqueue : 큐에서 데이터를 넣는 기능
- Dequeue : 큐에서 데이터를 꺼내는 기능
파이썬 queue 라이브러리 활용해서 큐 자료 구조 사용하기
- queue 라이브러리에는 다양한 큐 구조로 Queue(), LifoQueue(), PriorityQueue() 제공
• Queue() : 가장 일반적인 큐 자료 구조
• LifoQueue() : 나중에 입력된 데이터가 먼저 출력되는 구조 (스택구조)
• PriorityQueue() : 데이터마다 우선순위를 넣어서, 우선순위가 높은 순으로 데이터 출력
PriorityQueue((우선순위, 데이터))
참고 : 어디에 큐가 많이 쓰일까?
- 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨 (운영체제 참조)
파이썬을 활용한 Queue(), LifoQueue(), PriorityQueue() 구현
- Queue()
import queue
data_queue = queue.Queue # queue 라이브러리에 있는 Queue 사용
data_queue.put('dongjin')
data_queue.put(1)
print(data.queue.qsize()) # 2
print(data.queue.get()) # 'dongjin'
print(data.queue.qsize()) # 1
- LifoQueue()
import queue
data_queue = queue.LifoQueue # queue 라이브러리에 있는 LifoQueue 사용
data_queue.put('dongjin')
data_queue.put(1)
print(data.queue.qsize()) # 2
print(data.queue.get()) # 1
- PriorityQueue()
import queue
data_queue = queue.PriorityQueue # queue 라이브러리에 있는 PriorityQueue 사용
data_queue.put((10, 'dongjin'))
data_queue.put((5, 1))
data_queue.put((12, 'korea'))
print(data.queue.qsize()) # 3
print(data.queue.get()) # (5, 1)
print(data.queue.get()) # (10, 'dongjin')
리스트 변수로 큐를 다루는 enqueue, dequeue 기능 구현
queue_list = list()
def enqueue(data):
queue_list.append(data)
def dequeue():
data = queue_lsit[0]
del queue_list[0]
return data
for index in range(10):
enqueue(index)
print(len(queue_lsit)) # 10
print(dequeue()) # 0
'Algorithm & Data Structure > Data Structure' 카테고리의 다른 글
[자료구조] 해쉬 테이블 (Hash Table) - 2 (0) | 2020.08.24 |
---|---|
[자료구조] 해쉬 테이블 (Hash Table) - 1 (0) | 2020.08.24 |
[자료구조] 이중 링크드 리스트 (Double Linked List) (0) | 2020.06.30 |
[자료구조] 링크드 리스트 (Linked List) (2) | 2020.06.24 |
[자료구조] 스택 (Stack) (0) | 2020.06.17 |