컴퓨터 이론/자료구조 & 알고리즘

[자료구조] 큐(Queue)에 대해서 알아보자.

빙기때침식곡 2021. 10. 25. 11:14
반응형

오늘은 큐(Queue)에 대해서 알아보는 시간을 갖도록 하겠다.

 

Queue

 

(1) 정의

 - 선입선출(First In First Out - FIFO)의 자료구조이다. Queue라는 단어 자체가 표 같은 것을 구매하기 위해 줄서는 것을 의미한다.

 

 

(2) 특징

 - 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조이다.

 - FIFO(First In First out)로 스택과 꺼내는 순서가 반대이다..

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

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

 

이미지 출처 ttps://velog.io/@tiiranocode

 

(3) 활용

 - 멀티 테스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용된다. (운영체제 참조)

 - 큐의 경우에는 장단점 보다는 (특별히 언급되는 장단점이 없음), 큐의 활용 예로 프로세스 스케쥴링 방식을 함께 이해는게 좋다.

 

 

(4) 구현 - 파이썬

queue_list = list()

# enqueue method
def enqueue(data):
    queue_list.append(data)
   
# dequeue method
def dequeue():
    data = queue_list[0]
    del queue_list[0]
    return data

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

print(queue_list)

dequeue() # 0
dequeue() # 1

print(queue_list)

Result

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7, 8, 9]

 

 

(5) 응용 구현

 - 파이썬 Queue 라이브러리에는 다양한 큐를 제공한다.

 - Queue : 가장 일반적인 규 자료 구조

 - LifoQueue : 나중에 입력된 데이터가 먼저 출력되는 구조 (스택 구조라고 보면 됨)

 - PrioriyQueue : 데이터마다 우선순위를 넣어서, 우선순위가 높은 순으로 데이터 출력

 

① Queue

import queue

data_queue = queue.Queue()

data_queue.put("neymar")
data_queue.put(7)

data_queue.qsize()  # 2
data_queue.get()    # neymar
data_queue.qsize()  # 1
data_queue.get()    # 7

 

② LifoQueue - Last In First Out

import queue
data_queue = queue.LifoQueue()

data_queue.put("neymar")
data_queue.put(7)

data_queue.qsize() # 2
data_queue.get()   # 7

 

③ PriorityQueue

import queue

data_queue = queue.PriorityQueue()

data_queue.put((10, "messi"))
data_queue.put((5, 1))
data_queue.put((15, "ronaldo"))

data_queue.qsize() # 3
data_queue.get()   # (5, 1)
data_queue.get()   # (10, 'messi')
반응형