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