그리고 파이썬에서는

그리고 파이썬에서는

데크는 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'])  
그러므로

데크가 필요한 이유

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

제한된 Deque 입력 유형

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

데크에 대한 작업 

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

작업 설명 시간 복잡도
추가(x) 추가 x 데크의 오른쪽 끝에 있습니다. 오(1)
왼쪽 추가(x) 추가 x 데크의 왼쪽 끝에 있습니다. 오(1)
팝() deque의 오른쪽 끝에서 요소를 제거하고 반환합니다. 오(1)
팝레프트() deque의 왼쪽 끝에서 요소를 제거하고 반환합니다. 오(1)
확장(반복 가능) 다음의 모든 요소를 ​​추가합니다. iterable 데크의 오른쪽 끝에 있습니다. 괜찮은)
확장왼쪽(반복 가능) 다음의 모든 요소를 ​​추가합니다. iterable deque의 왼쪽 끝에 위치합니다(역순). 괜찮은)
제거(값) 첫 번째 발생을 제거합니다. 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])