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)- แทรกที่ตำแหน่ง iremove(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) |