Python의 큐

Python의 큐

스택과 마찬가지로 큐는 선입선출(First In First Out) 방식으로 항목을 저장하는 선형 데이터 구조입니다. FIFO ) 방식. 대기열을 사용하면 가장 최근에 추가된 항목이 먼저 제거됩니다. 대기열의 좋은 예는 먼저 온 소비자가 먼저 제공되는 리소스에 대한 소비자 대기열입니다.

Python의 대기열

대기열과 관련된 작업은 다음과 같습니다.

  • 대기열에 추가: 대기열에 항목을 추가합니다. 대기열이 가득 차면 오버플로 상태라고 합니다. – 시간 복잡도: O(1)
  • 따라서: 대기열에서 항목을 제거합니다. 항목은 푸시된 순서와 동일한 순서로 팝됩니다. 큐가 비어 있으면 언더플로우 상태라고 합니다. – 시간 복잡도: O(1)
  • 앞쪽: 대기열에서 맨 앞의 항목 가져오기 – 시간 복잡도: O(1)
  • 뒤쪽: 대기열에서 마지막 항목 가져오기 – 시간 복잡도: O(1)

Python에서 대기열 구현

큐를 구현하는 방법에는 여러 가지가 있습니다. 파이썬. 이 문서에서는 Python 라이브러리의 데이터 구조와 모듈을 사용하여 대기열을 구현하는 방법을 다룹니다. Python 대기열은 다음과 같은 방법으로 구현할 수 있습니다.

목록을 이용한 구현

리스트는 큐로 사용할 수 있는 Python의 내장 데이터 구조입니다. enqueue() 대신 따라서 () , 추가() 그리고 팝() 기능이 사용됩니다. 그러나 처음에 요소를 삽입하거나 삭제하려면 다른 모든 요소를 ​​하나씩 이동해야 하고 O(n) 시간이 필요하기 때문에 이 목적을 위해서는 목록이 상당히 느립니다.
이 코드는 Python 목록을 사용하여 대기열을 시뮬레이션합니다. 요소를 추가합니다 'ㅏ' , '비' , 그리고 '씨' 대기열에 추가한 다음 대기열에서 빼면 끝에 빈 대기열이 생성됩니다. 출력에는 초기 대기열, 대기열에서 제거된 요소( 'ㅏ' , '비' , '씨' ) 및 대기열의 빈 상태입니다.

파이썬3




queue> => []> queue.append(> 'a'> )> queue.append(> 'b'> )> queue.append(> 'c'> )> print> (> 'Initial queue'> )> print> (queue)> print> (> ' Elements dequeued from queue'> )> print> (queue.pop(> 0> ))> print> (queue.pop(> 0> ))> print> (queue.pop(> 0> ))> print> (> ' Queue after removing elements'> )> print> (queue)>

산출:

Initial queue ['a', 'b', 'c'] Elements dequeued from queue a b c Queue after removing elements [] 
Traceback (most recent call last):  File '/home/ef51acf025182ccd69d906e58f17b6de.py', line 25, in   print(queue.pop(0)) IndexError: pop from empty list 

collections.deque를 사용한 구현

Python의 대기열은 컬렉션 모듈의 deque 클래스를 사용하여 구현할 수 있습니다. Deque는 O(n) 시간 복잡성을 제공하는 목록에 비해 추가 및 팝 작업에 O(1) 시간 복잡성을 제공하므로 컨테이너 양쪽 끝에서 더 빠른 추가 및 팝 작업이 필요한 경우 목록보다 Deque가 선호됩니다. . enqueue와 deque 대신에 add()와 popleft() 함수가 사용됩니다.
코드는 deque> ~로부터 collections> 큐를 나타내는 모듈입니다. 그것은 덧붙인다 'ㅏ' , '비' , 그리고 '씨' 대기열에 추가하고 대기열에서 제거합니다. q.popleft()> , 결과적으로 빈 대기열이 생성됩니다. 주석 해제 중 q.popleft()> 대기열이 비어 있으면 IndexError> . 코드는 대기열 작업을 보여주고 빈 대기열 시나리오를 처리합니다.

파이썬3




from> collections> import> deque> q> => deque()> q.append(> 'a'> )> q.append(> 'b'> )> q.append(> 'c'> )> print> (> 'Initial queue'> )> print> (q)> print> (> ' Elements dequeued from the queue'> )> print> (q.popleft())> print> (q.popleft())> print> (q.popleft())> print> (> ' Queue after removing elements'> )> print> (q)>

산출:

Initial queue deque(['a', 'b', 'c']) Elements dequeued from the queue a b c Queue after removing elements deque([]) 
Traceback (most recent call last):  File '/home/b2fa8ce438c2a9f82d6c3e5da587490f.py', line 23, in   q.popleft() IndexError: pop from an empty deque 

queue.Queue를 사용한 구현

큐는 큐를 구현하는 데 사용되는 Python 내장 모듈입니다. queue.Queue(maxsize)는 변수를 최대 크기인 maxsize로 초기화합니다. 최대 크기가 0인 '0'은 무한 대기열을 의미합니다. 이 대기열은 FIFO 규칙을 따릅니다.
이 모듈에서는 다양한 기능을 사용할 수 있습니다:

  • 최대 크기 – 대기열에 허용되는 항목 수.
  • 비어 있는() – 대기열이 비어 있으면 True를 반환하고, 그렇지 않으면 False를 반환합니다.
  • 가득한() – 대기열에 최대 크기 항목이 있는 경우 True를 반환합니다. 대기열이 maxsize=0(기본값)으로 초기화된 경우 full()은 결코 True를 반환하지 않습니다.
  • 얻다() – 대기열에서 항목을 제거하고 반환합니다. 대기열이 비어 있으면 항목을 사용할 수 있을 때까지 기다립니다.
  • get_nowait() – 즉시 사용 가능한 항목이 있으면 항목을 반환하고, 그렇지 않으면 QueueEmpty를 발생시킵니다.
  • 넣다(항목) – 항목을 대기열에 넣습니다. 대기열이 가득 찬 경우 항목을 추가하기 전에 여유 슬롯을 사용할 수 있을 때까지 기다리십시오.
  • put_nowait(항목) – 차단하지 않고 항목을 대기열에 넣습니다. 즉시 사용 가능한 여유 슬롯이 없으면 QueueFull을 발생시킵니다.
  • 큐사이즈() – 대기열에 있는 항목 수를 반환합니다.

예: 이 코드는 Queue> 의 수업 queue> 기준 치수. 빈 대기열로 시작하여 '로 채웁니다. ㅏ', '비' , 그리고 '씨' . 큐에서 빼낸 후에는 큐가 비어지고 '1'이 추가됩니다. 이전에는 비어 있었음에도 불구하고 최대 크기가 3으로 설정되어 있으므로 가득 찬 상태로 유지됩니다. 코드는 가득 참 및 비어 있음 확인을 포함한 대기열 작업을 보여줍니다.

파이썬3




from> queue> import> Queue> q> => Queue(maxsize> => 3> )> print> (q.qsize())> q.put(> 'a'> )> q.put(> 'b'> )> q.put(> 'c'> )> print> (> ' Full: '> , q.full())> print> (> ' Elements dequeued from the queue'> )> print> (q.get())> print> (q.get())> print> (q.get())> print> (> ' Empty: '> , q.empty())> q.put(> 1> )> print> (> ' Empty: '> , q.empty())> print> (> 'Full: '> , q.full())>

산출:

0 Full: True Elements dequeued from the queue a b c Empty: True Empty: False Full: False