Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Deque ใน Python: คิวสองท้าย (Double-Ended Queue) ประสิทธิภาพสูง

Deque (Double-Ended Queue) เป็นโครงสร้างข้อมูลผสมระหว่าง Stack และ Queue รองรับการเพิ่ม/ลบที่ทั้งสองข้างได้ใน O(1) อยู่ในโมดูล collections

import collections


1. การเพิ่มข้อมูล (Appending)

  • append(x) - เพิ่มขวา
  • appendleft(x) - เพิ่มซ้าย
import collections as col
my_deque = col.deque('124dfre')
my_deque.append('x')       # ขวา
my_deque.appendleft('B')   # ซ้าย
# deque(['B', '1', '2', '4', 'd', 'f', 'r', 'e', 'x'])

2. การนำข้อมูลออก (Popping)

  • pop() - นำออกขวา
  • popleft() - นำออกซ้าย
item = my_deque.pop()      # 'e'
item = my_deque.popleft()  # '1'
# deque(['2', '4', 'd', 'f', 'r'])

3. ฟังก์ชันเกี่ยวกับ Item

  • index(x[, start[, stop]]) - หาตำแหน่ง x (เจอตัวแรก)
  • count(x) - นับจำนวน x
my_deque = col.deque('AABCDDEFD')
print(my_deque.index('D'))           # 4
print(my_deque.index('D', 5, 8))     # 5 (หาในช่วง)
print(my_deque.count('A'))           # 2
print(my_deque.count('D'))           # 3

4. insert() และ remove()

  • insert(i, x) - แทรกที่ตำแหน่ง i
  • remove(x) - ลบ x ตัวแรกที่เจอ
my_deque.insert(5, 'G')
my_deque.insert(7, 'H')
my_deque.remove('D')

5. Extending (เพิ่มหลายตัวพร้อมกัน)

  • extend(iterable) - เพิ่มขวา
  • extendleft(iterable) - เพิ่มซ้าย (ลำดับกลับ)
my_deque.extend([1, 3, 5, 7])
my_deque.extendleft(['x', 'y', 'z'])
# deque(['z', 'y', 'x', 'A', 'A', 'B', 'C', 'D', 'D', 'E', 'F', 'D', 1, 3, 5, 7])

6. Reverse และ Rotate

  • reverse() - กลับลำดับ
  • rotate(n) - หมุน n ตำแหน่ง (บวก=ขวา, ลบ=ซ้าย)
my_deque.reverse()
my_deque.rotate(3)
# deque(['B', 'A', 'A', 'D', 'F', 'E', 'D', 'D', 'C'])

สรุปเมธอดหลัก

เมธอดคำอธิบายComplexity
append/appendleftเพิ่มขวา/ซ้ายO(1)
pop/popleftนำออกขวา/ซ้ายO(1)
index/countค้นหา/นับO(n)
insert/removeแทรก/ลบตำแหน่งเฉพาะO(n)
extend/extendleftเพิ่มหลายค่าO(k)
rotateหมุนO(k)