[자료구조] 큐(Queue)

린다·2021년 2월 5일
post-thumbnail

큐 구조

가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있음 = 음식점에서 줄서는 행위와 동일

FIFO, LILO 방식으로 스택과는 꺼내는 순서가 반대

큐 관련 용어

Enqueue(인큐): 큐에 데이터를 넣는 기능

Dequeue(디큐): 큐에서 데이터를 꺼내는 기능

파이썬 queue 라이브러리 활용

queue 라이브러리에는 Queue(), LifoQueue(), PriorityQueue() 제공하고 있음

  • Queue(): 가장 일반적임
  • LifoQueue(): 나중에 입력된 데이터가 먼저 출력되는 구조 (스택 구조라고 보면 됨)
  • PriorityQueue()): 데이터마다 우선순위를 줘서 우선순위가 높은 순으로 데이터 출력

코드 구현

큐 만들기

Queue (FIFO)

import queue

data_queue = queue.Queue()
#queue = 라이브러리명
#Queue = Que 클래스

data_queue.put("funcoding")
data_queue.put(1)
#put : Enqueue
#get : Dequeue

data_queue.qsize()
#2

data_queue.get()
#'funcoding'
#get안에는 인자 사용안함, get하면 데이터가 빠져나가기 때문에 큐 사이즈가 줄어듦

LifoQueue (LIFO)

import queue
data_queue = queue.LifoQueue()

data_queue.put("funcoding")
data_queue.put(1)

data_queue.get()
#1

PriorityQueue

import queue

data_queue = queue.PriorityQueue()

data_queue.put((10, "korea"))
data_queue.put((5,1))
data_queue.put((15, "china"))

data_queue.get()
#(5,1) : 우선순위가 가장 높은것부터 뽑음

큐가 많이 쓰이는 곳

멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨

장단점보다는 큐의 활용 예로 프로세스 스케쥴링 방식을 이해해두는 것이 좋음


리스트 변수로 Enqueue, Dequeue 구현

queue_list = list()

def enqueue(data):
	queue.list.append(data)

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

0개의 댓글