Algorithm 1 Queue

Updated:

Algorithm

큐 (Queue)

1. 큐 구조

  • 선입선출(FIFO), 후입후출(LILO)

Algorithm

2. 용어

  • enqueue : 큐에 데이터를 넣는 기능
  • dequeue : 큐에 데이터를 빼는 기능

3. 파이썬 queue 라이브러리 활용해서 큐 자료 구조 사용하기

  • queue 라이브러리에는 다양한 큐 구조로 Queue(), LifoQueue(), PriorityQueue() 제공
  • 프로그램을 작성할 때 프로그램에 따라 적합한 자료 구조를 사용
    • Queue(): 가장 일반적인 큐 자료 구조
    • LifoQueue(): 나중에 입력된 데이터가 먼저 출력되는 구조 (스택 구조라고 보면 됨)
    • PriorityQueue(): 데이터마다 우선순위를 넣어서, 우선순위가 높은 순으로 데이터 출력

3.1 Queue()로 큐 만들기(FIFO, 가장 일반적임)

import queue

queue = queue.Queue()
# queue 라는 큐 변수에 put() 함수를 사용하여 데이터를 넣어본다.
queue.put('quant')
queue.put(1000)
# 2개의 데이터를 넣고 qsize ()로 큐사이즈를 물어본다.
queue.qsize()
2
# get() 함수로 FIFO에 맞게 'quant'를 꺼내는지 확인해 본다.
queue.get()
'quant'

3.2. LifoQueue()로 큐 만들기 (LIFO)

import queue

queue = queue.LifoQueue()
# queue 라는 큐 변수에 put() 함수를 사용하여 데이터를 넣어본다.
queue.put('quant')
queue.put(1000)
# 2개의 데이터를 넣고 qsize() 로 큐사이즈를 물어본다.
queue.qsize()
2
# get() 함수로 LIFO에 맞게 1000를 꺼내는지 확인해 본다.
queue.get()
1000

3.3. PriorityQueue()로 큐 만들기

import queue

queue = queue.PriorityQueue()
# put() 함수를 이용하여 우선순위 1=python, 2=java, 3=go 로 각각 데이터를 넣어준다.
queue.put((1, 'python'))
queue.put((2., 'java'))
queue.put((3, 'go'))
# qsize() 로 큐사이즈를 물어본다.
queue.qsize()
3
# get() 함수로 우선순위가 가장 빠른 1=python 을 빼내는지 확인한다.
queue.get()
(1, 'python')

4. 리스트 변수로 enqueue, dequeue 구현해보기

q_list = list()

def enqueue(data):
    q_list.append(data)
    
def dequeue():
    data = q_list[0]
    del q_list[0]
    return data
for i in range(1, 11):
    enqueue(i)
q_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
dequeue()
1
  • enqueue() 에서 range(1, 11)로 지정을 해주었기 때문에 리스트에 1부터 10까지 들어가게 되었고 dequeue() 로 확인을 해보니 가장 먼저 들어간 1을 빼낸걸 확인할 수 있다.

Leave a comment