[파이썬 자료구조] 2. 큐 (Queue)

4232 단어 queuequeue

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 라고 한다



EnqueueDequeue를 파이썬으로 구현해보자

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을 할 예정이다 🎫🕶

좋은 웹페이지 즐겨찾기