Hi, There!
안녕하세요, 바오밥입니다.
목차
- 개요
- 본문
- Reference
개요
꼭 알아둬야 할 자료 구조인 큐(Queue)에 대해서 한 번 정리해 보도록 하겠습니다.
해당 글은 1차적으로 코드 없는 알고리즘과 데이터 구조 책을 읽고, 개념을 익힌 뒤 패스트캠퍼스의 인강을 통해 재정리한 내용입니다.
본문
큐 구조
가장 먼저 넣은 데이터가 가장 먼저 나오는 구조입니다.
이를 줄여서 FIFO(선입선출) 또는 LILO(후입후출) 이라고 부릅니다.
이 중 FIFO 정책이 필요할 때 주로 사용합니다.
큐 관련 용어
- Enqueue : 큐에 데이터 삽입
- Dequeue : 큐에 데이터 제거
큐 구현 코드
라이브러리를 이용하여 일반 큐 구현
import queue
# queue 라이브러리를 이용하여 큐 자료구조 불러오기
data_queue = queue.Queue()
# 불러온 자료 구조에 1->2->3 순서로 집어넣기
data_queue.put(1)
data_queue.put(2)
data_queue.put(3)
# FIFO임으로 1이 출력
print(data_queue.get())
# 남아있는 요소는 2,3으로 2가 출력
print(data_queue.qsize())
라이브러리를 이용하여 LIFO 큐 구현
import queue
# queue 라이브러리를 이용하여 LIFO 큐 자료구조 불러오기
data_queue = queue.LifoQueue()
# 불러온 자료 구조에 1->2->3 순서로 집어넣기
data_queue.put(1)
data_queue.put(2)
data_queue.put(3)
# LIFO임으로 3이 출력
print(data_queue.get())
# 남아있는 요소는 1,2으로 2가 출력
print(data_queue.qsize())
라이브러리를 이용하여 우선순위 큐 구현
import queue
# queue 라이브러리를 이용하여 LIFO 큐 자료구조 불러오기
data_queue = queue.PriorityQueue()
# 불러온 자료 구조에 우선 순위 값을 지정하여 집어넣기
data_queue.put((1,"1순위 우선순위"))
data_queue.put((3,"3순위 우선순위"))
data_queue.put((2,"2순위 우선순위"))
# 우선순위 값이 1순위(낮은 숫자 우선)인 값이 출력
# 1, "1순위 우선순위" 가 출력됨
print(data_queue.get())
# 남아있는 우선순위 2,3번이 있음으로 2가 출력
print(data_queue.qsize())
라이브러리를 이용하지 않고 직접 일반 큐 구현
import queue
queue_list = list()
def enqueue(data):
queue_list.append(data)
def dequeue():
print(queue_list[0])
queue_list.remove(queue_list[0])
def qSize():
print(len(queue_list))
# enqueue로 1 -> 2 -> 3 삽입
enqueue(1)
enqueue(2)
enqueue(3)
# FIFO임으로 1 -> 2 출력
dequeue()
dequeue()
# 요소 3만 남았으로 1 출력
qSize()
큐의 종류
위에서 구현한 LIFO 큐, 우선순위 큐에 대한 내용들을 간단한게 정리해보았습니다.
- LIFO 큐 : 후입선출 개념의 자료 구조
- 우선순위 큐 : 데이터 삽입 시에 매겨지는 우선순위에 따라 큐가 처리되는 자료 구조
큐의 사용 용도
- 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됩니다.
해당 부분은 별도로 CS 카테고리 부분에서 정리하겠습니다.
Reference
- 코드 없는 알고리즘과 데이터 구조
- 알고리즘 / 기술면접 완전 정복 올인원 패키지 Online.
'Theory > Algorithm & Data Structure' 카테고리의 다른 글
[자료구조] 누구나 아는 배열에 대해서 (0) | 2023.12.03 |
---|---|
[자료구조] 링크드 리스트(Linked List) (0) | 2021.08.04 |
[자료구조] 스택(Stack) (0) | 2021.08.03 |
[자료구조] 배열(Array) (0) | 2021.07.26 |
[알고리즘] 에라토스테네스의 체 (임의 범위 내에서 소수 구하기) (0) | 2021.07.23 |