큐(Queue)

Minji Lee·2023년 3월 14일
0

파이썬코테

목록 보기
2/3
post-thumbnail
  • 배열과 함께 쉬운 자료구조 중 하나
  • 운영체제, 네트워크 등에 많이 사용됨

큐 구조(정책)

  • 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 → 줄을 서는 행위와 유사
  • FIFO(First-In, First-Out) 혹은 LILO(Last-In, Last-Out) 방식 → 스택과 꺼내는 순서가 반대
  • 큐에 데이터를 넣는 기능, 큐에 데이터를 빼는 기능 → 총 두 가지 기능 존재

용어

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

queue 라이브러리 활용 in 파이썬

  • 파이썬에 존재하는 큐 라이브러리 → Queue(), LifoQueue(), PriorityQueue() 제공 → 프로그램 작성할 때 프로그램에 따라 적합한 자료구조 사용하기
    • Queue(): 가장 일반적인 큐 자료구조
    • LifoQueue(): 나중에 입력된 데이터가 먼저 출력되는 구조(스택 구조)
    • PriorityQueue(): 데이터마다 우선순위를 부여하여, 우선순위가 높은 순으로 데이터 출력

Queue()로 큐 만들기(일반적인 큐, FIFO)

: 먼저 넣은 데이터를 먼저 출력

import queue #라이브러리 명

data_queue = queue.Queue() #queue라이브러리안에 존재하는 Queue클래스
data_queue.put("funcoding")
data_queue.put(1)
# put을 통해 데이터 추가
data_queue.qsize()
# queue 사이즈 출력
# 2
data_queue.get()
# get을 통해 데이터를 출력 -> 맨 처음으로 넣어진 데이터 출력
# 큐에서 제거됨
# 인자 넣을 필요 없음
# funcoding
data_queue.qsize()
# 1
data_queue.get()
# 1
data_queue.qsize()
#0

LifoQueue()로 큐 만들기(LIFO)

: 나중에 넣은 데이터를 먼저 출력

import queue
data_queue=queue.LifoQueue()
data_queue.put("funcoding")
data_queue.put(1)
data_queue.qsize()
# 2
data_queue.get()
# 1
# LifoQueue는 마지막에 넣은 데이터를 먼저 출력

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()
# 3
data_queue.get()
# (5,1)
# 숫자 값이 낮을 수록 우선순위가 더 높음
# 즉, 우선순위가 더 높은 데이터 먼저 출력
data_queue.get()
# (10, "korea")

큐가 사용되는 경우

  • 운영체제: 멀티 태스킹을 위한 프로세스 스케줄링 방식 구현하기 위해 사용됨

프로그래밍 연습

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

queue_list=list()

#데이터를 넣는 enqueue함수 구현
def enqueue(data):
	queue_list.append(data)

#데이터를 빼는 dequeue함수 구현
def dequeue():
	# 먼저 들어간 데이터를 먼저 빼야하므로
	# 가장 앞에 있는 데이터를 추출
	data=queue_list[0]
	# 추출한 데이터 삭제
	del queue_list[0]
	# 추출한 데이터 반환
	return data
for index in range(10):
	enqueue(index)

len(queue_list)
#10
dequeue()
#0
dequeue()
1

0개의 댓글