대기열은 선입선출에서 작동하는 선형 데이터 구조입니다. 메커니즘(FIFO).
대기열에 가장 먼저 입력되는 요소가 가장 먼저 처리됩니다.
예시
대기열 데이터 구조는 버스 정류장에 있는 대기열의 도움으로 이해할 수 있습니다. 버스 정류장에 먼저 도착한 사람이 가장 먼저 줄을 서고 다른 사람들이 버스 정류장에 도착하면 그를 세워줍니다. 버스가 도착하면 정류장에 먼저 도착한 사람이 먼저 버스에 탑승하고 나머지는 정류장에 도착한 순서대로 승차합니다. 따라서 FIRST IN FIRST OUT 메커니즘을 따릅니다.
파이썬에서 큐 구현
Python의 Queue는 다른 선형 데이터 구조나 Python 라이브러리의 내장 모듈을 사용하여 다양한 방식으로 구현할 수 있습니다.
방법 1 - 목록을 사용하여 구현
Python의 큐는 list를 사용하여 구현할 수 있습니다. 목록의 시작 부분에 요소를 삽입하거나 삭제하는 것은 O(n) 시간이 걸리므로 다른 방법을 사용하는 구현에 비해 느리기 때문에 그다지 효율적이지 않습니다.
관련 작업
추가() − 이 함수는 큐의 끝에 요소를 추가합니다.
팝(0) − 이 함수는 큐의 첫 번째 요소를 제거하고 반환합니다.
예시
queue=[] queue.append(1) queue.append(2) queue.append(3) print("Initial queue",queue) print("Element popped from the queue") print(queue.pop(0)) print(queue.pop(0)) print("Queue after popping some elements",queue)
출력
Initial queue [1, 2, 3] Element popped from the queue 1 2 Queue after popping some elements [3]
대기열이 비어 있으면 더 이상 요소를 제거할 수 없습니다. 그렇게 하면 예외가 발생합니다.
queue.pop(0) IndexError: pop from empty list
방법 2 - queue.Queue를 사용하여 구현
이것은 파이썬에서 내장 모듈을 사용하여 큐를 구현하는 방법입니다. 큐에서 큐를 가져와야 합니다. 특정 크기로 대기열을 초기화할 수 있습니다. 크기가 0이면 무한 대기열을 의미합니다.
관련 작업
최대 크기 - 큐에 허용되는 최대 요소 수
get() - 큐에서 첫 번째 요소를 제거하고 반환합니다. 대기열이 비어 있으면 대기열에 요소가 하나 이상 있을 때까지 기다립니다.
get_nowait() - 큐에서 첫 번째 요소를 제거하고 반환합니다. 큐가 비어 있으면 예외를 발생시킵니다.
넣다(항목) - 큐 끝에 요소를 추가합니다. 큐가 가득 차면 빈 슬롯을 사용할 수 있을 때까지 기다립니다.
put_nowait(항목) - 큐 끝에 요소를 추가합니다. 큐가 가득 차면 예외를 발생시킵니다.
전체() - 큐가 가득 차면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
빈() - 큐가 비어 있으면 True를 반환하고, 그렇지 않으면 false를 반환
qsize() - 큐에 있는 요소의 수를 반환합니다.
예시
from queue import Queue q=Queue(maxsize=3) q.put(1) q.put(2) q.put(3) print("Is queue full",q.full()) print("Element popped from the queue") print(q.get()) print(q.get()) print("Number of elements in queue",q.qsize()) print("Is queue empty",q.empty())
출력
Is queue full True Element popped from the queue 1 2 Number of elements in queue 1 Is queue empty False
방법 3 - collections.deque를 사용하여 구현
이것은 파이썬에서 큐를 구현하는 또 다른 방법입니다. 컬렉션 모듈에서 deque를 가져와야 합니다.
관련 작업
추가() − 이 함수는 큐의 끝에 요소를 추가합니다.
팝레프트() − 이 함수는 O(1) 시간 복잡도에서 큐의 첫 번째 요소를 제거하고 반환합니다.
예시
from collections import deque queue=deque() queue.append(1) queue.append(2) queue.append(3) print("Intial queue: ",queue) print("Element popped from the queue") print(queue.popleft()) print(queue.popleft()) print("Queue after popping some elements: ",queue)
출력
Intial queue: deque([1, 2, 3]) Element popped from the queue 1 2 Queue after popping some elements: deque([3])
빈 데크에서 popleft() 함수를 사용하면 예외가 발생합니다.