줄을 서는 대기열, 큐(Queue)
큐(Queue)
는 줄을 서는 대기열과 같은 자료구조입니다.
먼저 줄을 선 사람이 가장 먼저 서비스를 받는 것처럼, 큐에서는 먼저 들어온 데이터가 먼저 처리됩니다.
이러한 구조로 인해 큐는 FIFO(First In, First Out)
, "먼저 들어온 것이 먼저 나간다"라는 원칙을 따르는 자료구조입니다.
큐는 어떻게 활용되나요?
-
프린터 작업 대기열: 프린터는 먼저 들어온 인쇄 작업을 먼저 처리합니다.
-
콜센터 대기열: 고객이 전화를 걸면 대기열에 추가되고, 상담원이 자유로워지면 먼저 대기 중인 고객부터 상담을 시작합니다.
큐의 주요 연산
큐에서 자주 사용하는 연산은 다음과 같습니다.
-
enqueue: 큐의 끝에 새로운 데이터를
추가
하는 연산입니다. -
dequeue: 큐의 앞에서 데이터를
제거 및 반환
하는 연산입니다. -
peek: 큐의 앞에 있는 데이터를 제거하지 않고
확인
하는 연산입니다. -
is_empty: 큐가
비어 있는지
를 확인하는 연산입니다.
파이썬에서의 큐 구현
리스트의 append()
메서드를 사용해 데이터를 추가하고, pop(0)
메서드를 사용해 데이터를 제거하면 큐의 기본적인 기능을 구현할 수 있습니다.
파이썬에서의 큐 구현 예제
class Queue:
# 큐 초기화
def __init__(self):
self.queue = []
# 큐에 데이터 추가
def enqueue(self, item):
self.queue.append(item)
print(f"Enqueue: {item}가 큐에 추가되었습니다.")
# 큐에서 데이터 제거
def dequeue(self):
if not self.is_empty():
item = self.queue.pop(0)
print(f"Dequeue: {item}가 큐에서 제거되었습니다.")
return item
else:
print("Dequeue: 큐가 비어 있습니다.")
return None
# 큐의 가장 앞에 있는 데이터 확인
def peek(self):
if not self.is_empty():
return self.queue[0]
else:
print("Peek: 큐가 비어 있습니다.")
return None
# 큐가 비어 있는지 확인
def is_empty(self):
return len(self.queue) == 0
# 큐 사용 예시
my_queue = Queue()
my_queue.enqueue(1) # Enqueue: 1이 큐에 추가
my_queue.enqueue(2) # Enqueue: 2가 큐에 추가
print(f"Peek: 현재 큐의 가장 앞에 있는 값은 {my_queue.peek()}입니다.")
my_queue.dequeue() # Dequeue: 1이 큐에서 제거
my_queue.dequeue() # Dequeue: 2가 큐에서 제거
my_queue.dequeue() # 큐가 비어 있어 제거할 수 없음
정리하면?
-
큐는
FIFO(First In, First Out)
구조를 따르는 자료구조입니다. -
주요 연산으로는 enqueue(추가), dequeue(제거), peek(데이터 확인), is_empty(비어 있는지 확인)이 있습니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!