[자료구조] Queue(큐)



Queue(큐) 란?

한마디 버전:

(한글) 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 FIFO(First-In-First-Out) 형식의 선형 데이터 구조

(영문) The linear  FIFO data structure that return data which the least recently added.

사전적 의미 :

queue 
  • 미국∙영국 [kjuː] 
  • 1.

    명사 英 (무엇을 기다리는 사람자동차 등의) 줄

  • 2.

    명사 컴퓨터 큐, 대기 행렬

  • 3.

    동사 英 줄을 서서 기다리다



1. 기본 개념

위의 사전적 의미만 봐도 줄을 서는 것을 알 수 있습니다.

Stack 버전에서도 설명했지만 한번더 복붙 하겠습니다.

딩그르르는 배낭여행을 갔습니다. 제일 아래에는 가벼운 것을 넣는 것이 긴 여행에 유리하다는 말을 듣고 휴지등을 넣었습니다. 하지만, 어느순간 배가 아파서 휴지를 꺼내려고 하는데 위에서 부터 모두 꺼내야 휴지를 꺼낼 수 있는 상황입니다. 이렇게 먼저 들어간 것을 꺼내려면 제일 마지막에 꺼낼 수 있는 구조가 Stack(스택)입니다.

다행히 화장실을 다녀온 후 티켓팅을 위해 공항에서 줄을 섰습니다.  줄은 길지 않았지만, 딩그르르앞에 사람이 모두 끝난 후에야 티케팅을 할 수 있었습니다. 이 구조가 (Queue) 입니다.

>>> 이 글을 끝까지 읽으시고 Stack에 대해서도 알아보세요.



2. 용어

  • enqueue : 줄을 서는 행위(Queue에 데이터를 넣는 행위)
  • dequeue : 차례가 되어 승무원이 불러서 줄에서 나오는 행위(Queue에서 데이터를 빼는 행위)



3. 라이브러리

파이썬은 기본적으로 queue 라이브러리를 지원합니다. 

Queue만을 위한 것이 아니라 이 안에서는 Queue, LifoQueue(Stack), PriorityQueue(우선순위 큐) 를 지원합니다.

import queue
import random

fifo_que = queue.Queue()
lifo_que = queue.LifoQueue()
priority_que = queue.PriorityQueue()

# 여기서는 put, get 으로 데이터를 넣고 뺍니다.

for i in range(5):
fifo_que.put(i)
lifo_que.put(i)
# 우선순위 큐에는 1~100 사이 난수(정수)를 큐에 넣습니다.
priority_que.put(random.randint(1, 100))

for i in range(5):
print('FIFO {}번째 데이터 :'.format(str(i+1)), fifo_que.get())
print('LIFO {}번째 데이터 :'.format(str(i+1)), lifo_que.get())
print('우선순위큐 {}번째 데이터 :'.format(str(i+1)), priority_que.get()) >>> FIFO 1번째 데이터 : 0 >>> LIFO 1번째 데이터 : 4 >>> 우선순위큐 1번째 데이터 : 5 >>> FIFO 2번째 데이터 : 1 >>> LIFO 2번째 데이터 : 3 >>> 우선순위큐 2번째 데이터 : 32 >>> FIFO 3번째 데이터 : 2 >>> LIFO 3번째 데이터 : 2 >>> 우선순위큐 3번째 데이터 : 68 >>> FIFO 4번째 데이터 : 3 >>> LIFO 4번째 데이터 : 1 >>> 우선순위큐 4번째 데이터 : 81 >>> FIFO 5번째 데이터 : 4 >>> LIFO 5번째 데이터 : 0 >>> 우선순위큐 5번째 데이터 : 85

FIFO 는 넣은 순서대로, LIFO는 넣은 순서의 반대로, 우선순위 큐는 올림차순으로 반환 된 것을 보실수 있습니다.
현재 위에 보이는 우선순위 큐는 Heap에서 다룰 최소힙(Minimum Heap)과 같이 반환됩니다.



4. 어디서 사용되나요 ?

멀티 테스킹을 위한 프로세스 방식을 구현하기 위해 많이 사용됨(운영체제, 네트워크 등등등)



5. 그래서 뭐가 좋아요?

쉽고, 편합니다. 빠르다거나 느리다거나 그런 특별한 장단점은 없습니다. 반드시 알고 있어야 하고, 언제 어디서든 사용될 수 있는 자료구조 입니다.



6. 키포인트

  • FIFO 정책을 사용한다.
  • 쉽고 구현하기 편하다.



7. 추가 Tip

  • 파이썬 내에 Queue 라이브러리 말고도 list 함수를 가지고 구현해 낼 수 있습니다.
  • 리스트에서 list.pop(-1) 하면 제일 마지막 엘레멘트가 list에서 삭제됩니다.


  • [[a.original_name]] ([[a.file_size | fileSizer]])
좋아요[[ postLike | likePlus ]]
공유
라이언

“Lead Python Engineer”

댓글 [[totalCommentCount]]
[[ comment.author__nick_name ]] [[ comment.datetime_updated | formatDate]] (수정됨)

[블라인드 처리된 글 입니다.]

답장
[[ sub.author__nick_name ]] [[ sub.datetime_created | formatDate ]] (수정됨)

취소
댓글을 남겨주세요.
'컴퓨터공학' 관련 최신 포스트
[[ post.title ]]
[[ post.datetime_published_from | DateOnly ]]