[자료구조 with Python] 큐(Queue)

Cobugi·2021년 8월 9일
0

자료구조

목록 보기
1/3

큐(Queue)

  • 먼저 들어간 데이터부터 먼저 꺼낼 수 있는 구조
  • FIFO(First-In, First-Out) <=> LILO(Last-In, Last-Out)

용어

  • enqueue: 큐에 데이터를 넣는 기능
  • dequeue: 큐에서 데이터를 꺼내는 기능



파이썬 queue 라이브러리 활용

  • import queue
  • Queue: 일반적인 큐
  • LifoQueue: 나중에 입력된 데이터가 먼저 출력되는 구조(스택과 비슷)
  • PriorityQueue: 데이터에 우선순위를 매겨 우선순위가 높은 순으로 출력하는 구조

Queue

import queue
data_queue = queue.Queue()

# 큐에 데이터 넣기
data_queue.put("cobugi")
data_queue.put(7)

# 큐에 데이터가 몇개인지 확인
data_queue.qsize()			# 2

# 큐에서 데이터 꺼내기
data_queue.get()
	# "cobugi" (why?:제일 먼저 들어간 데이터가 "cobugi"니까)
    
# 큐에 데이터가 몇개인지 다시 확인
data_queue.qsize()			# 1

# 큐에서 데이터 또 꺼내기
data_queue.get()			# 7

# 큐에 데이터가 몇개인지 다시 확인
data_queue.qsize()			# 0 (다 꺼냄)

LifoQueue

import queue
data_queue = queue.LifoQueue()

# 큐에 데이터 넣기
data_queue.put("cobugi")
data_queue.put(7)

# 큐에 데이터가 몇개인지 확인
data_queue.qsize()			# 2

# 큐에서 데이터 꺼내기
data_queue.get()
	# 7 (why?:제일 나중에 들어간 데이터가 7 이니까)
    
# 큐에 데이터가 몇개인지 다시 확인
data_queue.qsize()			# 1

# 큐에서 데이터 또 꺼내기
data_queue.get()			# "cobugi"

# 큐에 데이터가 몇개인지 다시 확인
data_queue.qsize()			# 0 (다 꺼냄)

PriorityQueue

import queue
data_queue = queue.PriorityQueue()

# 큐에 데이터 넣기
# tuple형식으로 넣기 (우선순위, 넣을 데이터)
# 우선순위는 숫자가 작을수록 높음(= 1위 > 3위)
data_queue.put((10, "cobugi"))
data_queue.put((5, 7))
data_queue.put((15, "rabbit"))

# 큐에 데이터가 몇개인지 확인
data_queue.qsize()			# 3

# 큐에서 데이터 꺼내기
data_queue.get()
	# (5, 1) (why?:우선순위가 제일 높으니까)
    
# 큐에서 데이터 또 꺼내기
data_queue.get()			# (10, "cobugi")

enqueue, dequeue 기능 구현

queue_list = list()

# 리스트에 마지막에 데이터 넣기
def enqueue(data):
    queue_list.append(data)

# 리스트 첫번 째에서 데이터를 꺼내기
def dequeue():
    data = queue_list[0]
    del queue_list[0]
    # 없애야지 다음에 또 함수를 호출할 때 그다음 첫번째 데이터를 꺼낼 수 있음
    return data
    
# 0부터 9까지 넣기
for index in range(10):
    enqueue(index)

print(len(queue_list))			# 10

dequeue() # 0이 빠짐
dequeue() # 1이 빠짐
dequeue() # 2가 빠짐
dequeue() # 3이 빠짐
profile
iOS Developer 🐢

0개의 댓글