[파이썬 자료구조] 2. 큐 (Queue)
Python 자료구조를 A to Z 복습 해보자 ! 🐈
Queue 안 고양이
1. What is a Queue?
Queue는 먼저 입력된 데이터가 먼저 엑세스되는 FIFO(선입선출) 원칙 기반의 선형 데이터 구조이다
사진에 보이는 것처럼
Queue의 양쪽 끝인 head-tail or front-back에서 push 또는 pop을 수행할 수 있다
🚩 1-1 Need of Using Array
- 멀티태스킹을 위한 프로세스 스케줄링 방식
- 프린터의 출력 처리
- 윈도우 시스템 메시지 처리기
위와 같이 데이터가 입력된 시간 순서대로 처리해야하는 상황에 Queue가 이용된다
2. Enqueue & Dequeue
📲 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를 삭제하고 출력하는 기능이다
3. import queue
Python queue 라이브러리는 3가지의 Queue를 제공한다
- Queue()
가장 일반적인 Queue 자료구조
- LifoQueue()
나중에 입력된 데이터가 먼저 출력되는 구조 (stack과 동일)
- PriorityQueue()
데이터마다 우선순위를 넣어, 우선순위가 높은 순으로 출력되는 구조
이제 위의 3가지의 사용법을 알아보자
🚩 3-1 Queue()
import queue data_q = queue.Queue() data_q.put(1) data_q.put("cats")
모듈 queue의 Queue()로 일반적인 Queue를 생성하고 put을 사용해 원하는 데이터를 enqueue 한다
qsize() 메서드와 get() 메서드를 통해 queue의 size를 확인하고, data를 dequeue 했다
그럼 get() 한 후의 qsize는 몇일까?
dequeue를 진행했으니, 2 -> 1이 되었다
이로써 일반적인 queue인 FIFO 기반 Queue()를 알아보았다
🚩 3-2 LifoQueue()
LifoQueue 이름에서 부터 알 수 있듯이 LIFO 기반의 queue 이다
즉 나중에 입력된 데이터가 먼저 출력되는 구조이다 (스택과 동일)
import queue data_lq = queue.LifoQueue() data_lq.put("1") data_lq.put("cats")
앞선 Queue() 예시와 동일한 데이터를 동일한 순서로 put 했다
똑같이 qsize와 get을 적용해보자
LifoQueue()에 get을 하니 Queue()와는 다르게 'cats'라는 데이터가 먼저 나옴을 볼 수 있다
🚩 3-3 PriorityQueue()
import queue data_pq = queue.PriorityQueue()
우선순위에 따라 data가 out 되고, 실제로 많이 쓰이는 정책이다
사진처럼 튜플 안 첫 번째에 우선순위를 넣어주고, 그 뒤에는 enqueue 할 data를 넣어준다
위와 같이 data들을 put 해주고, get을 해보자
사진처럼 우선순위를 1로 넘겨준 data인 'a cat'이 가장 먼저 out됨을 볼 수 있다
여기서 또 한 번 get을 한다면 'cats'가 out됨을 쉽게 이해할 수 있다.
지금까지 Queue의 정의, 필요성, 기능 구현, 파이썬 모듈 사용법에 대해 알아보았다
다음 포스팅은 일반적인 Queue와 반대 개념인 Stack을 할 예정이다 🎫🕶
Author And Source
이 문제에 관하여([파이썬 자료구조] 2. 큐 (Queue)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soyoun9798/파이썬-자료구조-2.-큐-Queue저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)