Python

2. 큐(Queue)

Eva_0401 2020. 3. 16. 21:00

- 멀티테스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해

사용(운영체제에서 씀)

 

 

1. 종류

  • FIFO (선입선출) : 먼저 들어간 것이 먼저 나옴

 

INPUT

F E D C B A

OUTPUT

 

: 먼저 들어간 A가 먼저 나오게 된다.

import queue  #큐 라이브러리 실행

A_queue = queue.Queue()

A_queue.put("ABCD")
A_queue.put(1)

A_queue.qsize()  # 데이터가 2개 있으므로 2 출력 

A_queue.get() #데이터를 꺼내주는 것, 인자는 없음  'ABCD'출력

A_queue.qsize()  # 1 출력

A_queue.get()  # 1 출력

 

  • LIFO (후입선출) : 나중에 들어간 것이 먼저나옴 (컵에 돌멩이 담은 것이라 생각하면 됨)
import queue  #큐 라이브러리 실행

A_queue = queue.LifoQueue()

A_queue.put("ABCD")
A_queue.put(1)

A_queue.qsize()  # 데이터가 2개 있으므로 2 출력 

A_queue.get() #데이터를 꺼내주는 것, 인자는 없음  '1' 출력

 

  • PriorityQueue(우선순위) : 들어온 순서와 상관없이, 우선순위가 높은 게 먼저 나감
import queue  #큐 라이브러리 실행

A_queue = queue.PriorityQueue()

A_queue.put((10,"korea")) # 안쪽 괄호는 튜플을 의미함
A_queue.put((5,1))
A_queue.put((15,"china")) 

A_queue.qsize()  # 3 출력

A_queue.get()  # 우선순위가 젤 높은 (5,1)출력

A_queue.get()  # 우선순위가 두번째로 높은 (10,'korea') 출력

2. 관련 용어

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

 

3. 파이썬 queue 라이브러리

: 파이썬3에서 제공하는 Queue 라이브러리로, Queue, LifoQueue,PriorityQueue 제공

 

4. 연습

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

queue_list=list();

def enqueue(data):
    queue_list.append(data)
    
def dequeue():
    data = queue_list[0] # 0번 인덱스에 있는 데이터를 가져온다.
    del queue_list[0]   # 뽑힌 데이터를 삭제하여야 함
    return data

 

  • def : 파이썬에서 함수정의는 def로 시작한다. 함수 정의의 맨 첫줄은 반드시 : 을 포함하여야하며, 본문은 들여쓰기를 꼭 해야함! (4칸)

for index in range(10):  		 #데이터 10개 삽입
    enqueue(index)
    

len(queue_list)				 # 10 출력

dequeue() 				 # 0부터 한개씩 빠져나옴