큐 구조

  - 줄은 서는 행위와 유사

  - 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조, '선입선출' 구조의 자료구조

  - 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

+ Recent posts