CS/자료구조

[Python] 큐(Queue)

sujin7837 2021. 10. 25. 14:38
반응형

대표적인 데이터 구조 : 큐(Queue)

1) 큐 구조

가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조로, 줄을 서는 행위와 유사함

  • 음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일
  • FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식으로 스택과 꺼내는 순서가 반대

 

2) 알아둘 용어

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

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

 

※참고※

https://visualgo.net/en/list

 

VisuAlgo - Linked List (Single, Doubly), Stack, Queue, Deque

VisuAlgo is free of charge for Computer Science community on earth. If you like VisuAlgo, the only payment that we ask of you is for you to tell the existence of VisuAlgo to other Computer Science students/instructors that you know =) via Facebook, Twitter

visualgo.net

 

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

-queue 라이브러리에는 다양한 큐 구조로 Queue(), LifoQueue(), PriorityQueue() 제공

-프로그램을 작성할 때 프로그램에 따라 적합한 자료구조를 사용

  • Queue() : 가장 일반적인 큐 자료구조
  • LifoQueue() : 나중에 입력된 데이터가 먼저 출력되는 구조(스택 구조)
  • PriorityQueue() : 데이터마다 우선순위를 넣어서, 우선순위가 높은 순으로 데이터 출력

 

3-1) Queue()로 큐 만들기(가장 일반적인 큐, FIFO(First-In, First-Out))

import queue

data_queue = queue.Queue()

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

data_queue.qsize()
data_queue.get()
data_queue.qsize()
data_queue.get()

2

'funcoding'

1

1

 

3-2) LifoQueue()로 큐 만들기(LIFO(Last-In, First-Out))

import queue

data_queue = queue.LifoQueue()

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

data_queue.qsize()
data_queue.get()

2

1

 

3-3) PriorityQueue()로 큐 만들기

import queue

data_queue = queue.PriorityQueue()

data_queue.put((10, "korea"))	# (우선순위, 데이터)
data_queue.put((5, 1))
data_queue.put((15, "china"))

data_queue.qsize()
data_queue.get()
data_queue.get()

3

(5, 1)

(10, 'korea')

 

※참고※

어디에 큐가 많이 쓰일까?

멀티 태스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해 많이 사용됨(운영체제 참조)

  • 큐의 경우에는 장단점보다는 (특별히 장단점이 없음), 큐의 활용 예로 프로세스 스케줄링 방식을 함께 이해해두는 것이 좋음

 

4) 리스트 변수로 큐 구현하기

리스트 변수로 큐를 다루는 enqueue, dequeue 기능 구현해보기

queue_list = list()

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

 

 

출처 : 제로베이스

반응형

'CS > 자료구조' 카테고리의 다른 글

[Python] 해쉬 테이블(Hash Table)  (0) 2021.10.28
[Python] 시간복잡도-알고리즘 복잡도 표현 방법  (0) 2021.10.26
[Python] 링크드 리스트(Linked List)  (0) 2021.10.26
[Python] 스택(Stack)  (0) 2021.10.25
[Python] 배열  (0) 2021.10.25