logo

그리고 파이썬에서는

데크는 Double-Ended Queue의 약자입니다. 양쪽 끝에서 효율적으로 요소를 추가하고 제거할 수 있는 특별한 유형의 데이터 구조입니다.

일반적으로 First In First Out을 따르는 일반 대기열과 달리 deque는 FIFO 및 LIFO 작업을 모두 지원합니다. 이는 작업 스케줄링 슬라이딩 윈도우 문제 및 실시간 데이터 처리와 같은 실제 응용 프로그램에서 매우 유연하고 유용합니다.



예:

Python
from collections import deque # Declaring deque  de = deque(['name''age''DOB']) print(de) 

산출
deque(['name' 'age' 'DOB']) 
그러므로' title=

데크가 필요한 이유

  • 양쪽 끝에서 요소를 추가/제거하는 데 O(1) 시간을 지원합니다.
  • 프런트엔드 작업의 경우 목록보다 더 효율적입니다.
  • 큐(FIFO)와 스택(LIFO)의 역할을 모두 수행할 수 있습니다.
  • 슬라이딩 윈도우 문제 및 실시간 데이터 처리를 예약하는 데 이상적입니다.
  • 다음과 같은 강력한 내장 방법을 제공합니다. 왼쪽에 추가() 팝레프트() 그리고 회전().

제한된 Deque 입력 유형

  • 입력 제한 데크 :  한 쪽 끝에서는 입력이 제한되지만 양쪽 끝에서는 삭제가 허용됩니다.
  • 출력 제한 Deque : 출력은 한쪽 끝에서 제한되지만 삽입은 양쪽 끝에서 허용됩니다.

데크에 대한 작업 

다음은 설명 및 해당 시간 복잡도와 함께 Python에서 기본 제공되는 deque 작업을 나열하는 표입니다.

굵은 글씨용 CSS
작업 설명 시간 복잡도
추가(x) 추가x데크의 오른쪽 끝에 있습니다.오(1)
왼쪽 추가(x) 추가x데크의 왼쪽 끝에 있습니다.오(1)
팝() deque의 오른쪽 끝에서 요소를 제거하고 반환합니다.오(1)
팝레프트() deque의 왼쪽 끝에서 요소를 제거하고 반환합니다.오(1)
확장(반복 가능) 다음의 모든 요소를 ​​추가합니다.iterable데크의 오른쪽 끝에 있습니다.괜찮은)
확장왼쪽(반복 가능) 다음의 모든 요소를 ​​추가합니다.iterabledeque의 왼쪽 끝에 위치합니다(역순).괜찮은)
제거(값) 첫 번째 발생을 제거합니다.value데크에서. 레이즈ValueError발견되지 않으면.에)
회전(n) 데크를 회전합니다.n오른쪽으로 단계. 만약에n음수는 왼쪽으로 회전합니다.괜찮은)
분명한() 데크에서 모든 요소를 ​​제거합니다.에)
개수(값) 발생 횟수를 계산합니다.value데크에서.에)
인덱스(값) 첫 번째로 나타나는 인덱스를 반환합니다.value데크에서. 레이즈ValueError발견되지 않으면.에)
뒤집다() deque의 요소를 제자리로 되돌립니다.에)

대기열에서 항목 추가 및 삭제

  • 추가(x): deque의 오른쪽 끝에 x를 추가합니다.
  • 왼쪽에 추가(x): 데크의 왼쪽 끝에 x를 추가합니다.
  • 확장(반복 가능): iterable의 모든 요소를 ​​오른쪽 끝에 추가합니다.
  • 확장왼쪽(반복 가능): iterable의 모든 요소를 ​​왼쪽 끝에 추가합니다(역순으로).
  • 제거(값): deque에서 지정된 값의 첫 번째 항목을 제거합니다. 값을 찾을 수 없으면 ValueError가 발생합니다.
  • 팝(): 오른쪽 끝에서 요소를 제거하고 반환합니다.
  • 팝왼쪽(): 왼쪽 끝에서 요소를 제거하고 반환합니다.
  • 분명한(): 데크에서 모든 요소를 ​​제거합니다.
Python
from collections import deque dq = deque([10 20 30]) # Add elements to the right dq.append(40) # Add elements to the left dq.appendleft(5) # extend(iterable) dq.extend([50 60 70]) print('After extend([50 60 70]):' dq) # extendleft(iterable) dq.extendleft([0 5]) print('After extendleft([0 5]):' dq) # remove method dq.remove(20) print('After remove(20):' dq) # Remove elements from the right dq.pop() # Remove elements from the left dq.popleft() print('After pop and popleft:' dq) # clear() - Removes all elements from the deque dq.clear() # deque: [] print('After clear():' dq) 

산출:

After extend([50 60 70]): deque([5 10 20 30 40 50 60 70])  
After extendleft([0 5]): deque([5 0 5 10 20 30 40 50 60 70])
After remove(20): deque([5 0 5 10 30 40 50 60 70])
After pop and popleft: deque([0 5 10 30 40 50 60])
After clear(): deque([])

항목 및 deque 길이에 액세스

  • 인덱싱: 양수 또는 음수 인덱스를 사용하여 위치별로 요소에 액세스합니다.
  • 오직(): 데크의 요소 수를 반환합니다.
Python
import collections dq = collections.deque([1 2 3 3 4 2 4]) # Accessing elements by index print(dq[0]) print(dq[-1]) # Finding the length of the deque print(len(dq)) 

산출
1 4 7 

카운트 회전 및 데크 반전

  • 개수(값): 이 메서드는 데크에서 특정 요소의 발생 횟수를 계산합니다.
  • 회전(n): 이 방법은 deque를 n 단계만큼 회전시킵니다. 양수 n은 오른쪽으로 회전하고 음수 n은 왼쪽으로 회전합니다.
  • 뒤집다(): 이 메서드는 deque의 요소 순서를 반대로 바꿉니다.
Python
from collections import deque # Create a deque dq = deque([10 20 30 40 50 20 30 20]) # 1. Counting occurrences of a value print(dq.count(20)) # Occurrences of 20 print(dq.count(30)) # Occurrences of 30 # 2. Rotating the deque dq.rotate(2) # Rotate the deque 2 steps to the right print(dq) dq.rotate(-3) # Rotate the deque 3 steps to the left print(dq) # 3. Reversing the deque dq.reverse() # Reverse the deque print(dq) 

산출
3 2 deque([30 20 10 20 30 40 50 20]) deque([20 30 40 50 20 30 20 10]) deque([10 20 30 20 50 40 30 20])