쳉지로그

[자료구조 이론] 큐(Queue) 본문

코딩테스트/자료구조 이론

[자료구조 이론] 큐(Queue)

쳉지 2021. 4. 14. 04:35
  • 줄을 서는 행위와 유사
  • 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조
  • 예)음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장
  • FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식으로 스택과 꺼내는 순서가 반대

(참고)

  • 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨
  • Enqueue: 큐에 데이터를 넣는 기능
  • Dequeue: 큐에서 데이터를 꺼내는 기능
# Queue()로 큐 만들기
import queue

# FIFO Queue (일반적인 큐)
data_queue = queue.Queue()
data_queue.put('hello') # enqueue
data_queue.put(2)
data_queue.qsize() # size of queue => 2
data_queue.get() # dequeue => 'hello'

# LIFO Queue
data_queue_2 = queue.LifoQueue()
data_queue_2.put('world') # enqueue
data_queue_2.put(1)
data_queue_2.qsize() # size of queue => 2
data_queue_2.get() # dequeue => 1

# Priority Queue
### 우선순위가 높은 것 먼저 추출
### 데이터가 튜플 형태로 들어감: (priority, data)
### 우선순위가 높을수록 숫자가 낮다.
data_queue_3 = queue.PriorityQueue()
data_queue_3.put((10, "hello"))
data_queue_3.put((5, 1))
data_queue_3.put((15, "world"))
data_queue_3.qsize() # 3
data_queue_3.get() # (5, 1)
data_queue_3.get() # (10, "hello")

 

# 리스트 변수로 큐 만들기
queue_list = list()

def enqueue(data):
	queue_list.append(data)

def dequeue():
	data = queue_list[0]
	del queue_list[0]
	return data

for i in range(10):
	enqueue(i)

len(queue_list) # 10
queue_list # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
dequeue() # 0
Comments