Python 자료구조를 A to Z 복습 해보자 ! 🐈
Queue는 먼저 입력된 데이터가 먼저 엑세스되는 FIFO(선입선출) 원칙 기반의 선형 데이터 구조이다
사진에 보이는 것처럼
Queue의 양쪽 끝인 head-tail or front-back에서 push 또는 pop을 수행할 수 있다
- 멀티태스킹을 위한 프로세스 스케줄링 방식
- 프린터의 출력 처리
- 윈도우 시스템 메시지 처리기
위와 같이 데이터가 입력된 시간 순서대로 처리해야하는 상황에 Queue가 이용된다
📲 Enqueue
Queue에 데이터를 넣는 기능
📳 Dequeue
Queue에서 데이터를 꺼내는 기능
Queue에서 데이터를 push & pop 하는 것을 Enqueue & Dequeue 라고 한다
✨ Enqueue와 Dequeue를 파이썬으로 구현해보자
qlist = [] def enqueue(qlist, data): qlist.append(data) def dequeue(qlist): data = qlist[0] del qlist[0] return data
Python의 list, append, del
을 사용하여 구현할 수 있다
- enqueue 함수의 경우
간단히 list와 입력할 data를 전달하면,
전달한 list에 append를 이용해 data를 넣는 기능이다
- dequeue 함수의 경우
대상 list를 전달하면,
가장 첫 번째 element를 삭제하고 출력하는 기능이다
- Queue()
가장 일반적인 Queue 자료구조
- LifoQueue()
나중에 입력된 데이터가 먼저 출력되는 구조 (stack과 동일)
- PriorityQueue()
데이터마다 우선순위를 넣어, 우선순위가 높은 순으로 출력되는 구조
import queue data_q = queue.Queue() data_q.put(1) data_q.put("cats")
dequeue를 진행했으니, 2 -> 1이 되었다
이로써 일반적인 queue인 FIFO 기반 Queue()를 알아보았다
LifoQueue 이름에서 부터 알 수 있듯이 LIFO 기반의 queue 이다
즉 나중에 입력된 데이터가 먼저 출력되는 구조이다 (스택과 동일)
import queue data_lq = queue.LifoQueue() data_lq.put("1") data_lq.put("cats")
LifoQueue()에 get을 하니 Queue()와는 다르게 'cats'라는 데이터가 먼저 나옴을 볼 수 있다
import queue data_pq = queue.PriorityQueue()
우선순위에 따라 data가 out 되고, 실제로 많이 쓰이는 정책이다
사진처럼 튜플 안 첫 번째에 우선순위를 넣어주고, 그 뒤에는 enqueue 할 data를 넣어준다
위와 같이 data들을 put 해주고, get을 해보자
사진처럼 우선순위를 1로 넘겨준 data인 'a cat'이 가장 먼저 out됨을 볼 수 있다
여기서 또 한 번 get을 한다면 'cats'가 out됨을 쉽게 이해할 수 있다.