Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 큐(Queue) 자료구조 구현하기

파이썬으로 큐(Queue)를 구현하려면 먼저 큐 클래스를 정의하고, 요소를 추가(enqueue)하고 삭제(dequeue)하는 메서드를 작성해야 합니다. 그다음 클래스의 인스턴스를 생성한 뒤, 해당 인스턴스를 통해 메서드를 호출하고 결과를 콘솔에 출력하는 방식으로 동작합니다.

큐는 FIFO(First In, First Out) 방식, 즉 가장 먼저 들어온 데이터가 가장 먼저 나가는 선입선출 구조를 따르는 대표적인 자료구조입니다. 아래 예제를 통해 직접 확인해 보겠습니다.

예제 코드

class Queue_struct:
   def __init__(self):
      self.items = []

   def check_empty(self):
      return self.items == []

   def enqueue_elem(self, data):
      self.items.append(data)

   def dequeue_elem(self):
      return self.items.pop(0)

my_instance = Queue_struct()
while True:
   print('Enqueue <value>')
   print('Dequeue')
   print('Quit')
   my_input = input('What operation would you perform ? ').split()

   operation = my_input[0].strip().lower()
   if operation == 'Enqueue':
      my_instance.enqueue_elem(int(my_input[1]))
   elif operation == 'Dequeue':
      if my_instance.check_empty():
         print('The queue is empty...')
      else:
         print('The deleted value is : ', my_instance.dequeue_elem())
   elif operation == 'Quit':
      break

실행 결과

Enqueue <value>
Dequeue
Quit
What operation would you perform ? Enqueue 45
Enqueue <value>
Dequeue
Quit
What operation would you perform ? Enqueue 56
Enqueue <value>
Dequeue
Quit
What operation would you perform ? Enqueue 89
Enqueue <value>
Dequeue
Quit
What operation would you perform ? Dequeue
Enqueue <value>
Dequeue
Quit
What operation would you perform ? Dequeue
Enqueue <value>
Dequeue
Quit
What operation would you perform ? Quit

코드 설명

  • 필요한 속성을 갖춘 'Queue_struct' 클래스를 생성합니다.

  • '__init__' 함수는 객체가 생성될 때 호출되며, 내부적으로 빈 리스트를 초기화하는 역할을 합니다.

  • 'check_empty' 메서드는 리스트가 비어 있는지 여부를 확인하여 참(True) 또는 거짓(False)을 반환합니다.

  • 'enqueue_elem' 메서드는 전달받은 데이터를 리스트의 끝에 추가합니다.

  • 'dequeue_elem' 메서드는 리스트의 맨 앞에 있는 요소를 꺼내어 반환함으로써 FIFO 구조를 구현합니다.

  • 'Queue_struct' 클래스의 인스턴스를 하나 생성합니다.

  • 무한 반복문(while True) 안에서 사용자로부터 수행할 작업을 입력받습니다.

  • 사용자의 선택에 따라 Enqueue, Dequeue 작업을 수행하거나 'Quit' 입력 시 프로그램을 종료합니다.

  • 큐가 비어 있는 상태에서 Dequeue를 시도하면 안내 메시지를 출력하고, 그렇지 않으면 삭제된 값을 콘솔에 표시합니다.

참고: 더 효율적인 큐 구현 방법

위 예제에서는 리스트의 pop(0)을 사용했는데, 이 연산은 첫 번째 요소를 제거할 때 나머지 모든 요소를 앞으로 이동시켜야 하므로 시간 복잡도가 O(n)입니다. 실무에서는 collections.deque를 사용하는 것이 좋습니다. deque는 양쪽 끝에서의 삽입과 삭제가 O(1)로 매우 빠르기 때문입니다.

from collections import deque

queue = deque()
queue.append(10)   # enqueue
queue.append(20)
first = queue.popleft()  # dequeue → 10

이처럼 파이썬에서는 직접 클래스를 구현하는 방법과 표준 라이브러리를 활용하는 방법 모두 사용할 수 있으며, 목적과 성능 요구 사항에 따라 적절히 선택하면 됩니다.