يشير deque إلى قائمة الانتظار ذات النهاية المزدوجة. إنه نوع خاص من بنية البيانات يسمح لك بإضافة وإزالة العناصر من كلا الطرفين بكفاءة.
على عكس قوائم الانتظار العادية (التي عادةً ما تتبع First In First Out)، فإن deque يدعم كلاً من عمليات FIFO وLIFO. وهذا يجعلها مرنة للغاية ومفيدة في تطبيقات العالم الحقيقي مثل مشكلات النوافذ المنزلقة لجدولة المهام ومعالجة البيانات في الوقت الفعلي.
مثال:
Pythonfrom collections import deque # Declaring deque de = deque(['name''age''DOB']) print(de)
الإخراج
deque(['name' 'age' 'DOB'])

لماذا نحتاج إلى deque
- وهو يدعم الوقت O(1) لإضافة/إزالة العناصر من كلا الطرفين.
- إنها أكثر كفاءة من قوائم العمليات الأمامية.
- يمكن أن تعمل كقائمة انتظار (FIFO) ومكدس (LIFO).
- مثالية لجدولة مشاكل النوافذ المنزلقة ومعالجة البيانات في الوقت الفعلي.
- إنه يوفر أساليب مدمجة قوية مثل يلحق () بوبليفت () و تناوب().
أنواع مدخلات Deque المقيدة
- الإدخال مقيد Deque : الإدخال محدود من طرف واحد بينما يُسمح بالحذف من كلا الطرفين.
- إخراج مقيد Deque : الإخراج محدود من طرف واحد ولكن الإدراج مسموح به من كلا الطرفين.
العمليات على deque
فيما يلي جدول يسرد العمليات المضمنة لـ deque في Python مع الأوصاف والتعقيدات الزمنية المقابلة لها:
مجموعة ديناميكية في جافا
| عملية | وصف | تعقيد الوقت |
|---|---|---|
| إلحاق (خ) | يضيفxإلى الطرف الأيمن من deque. | يا(1) |
| يسار الملحق(x) | يضيفxإلى الطرف الأيسر من deque. | يا(1) |
| البوب () | يزيل ويعيد عنصرًا من الطرف الأيمن من deque. | يا(1) |
| بوبليفت () | إزالة وإرجاع عنصر من الطرف الأيسر من deque. | يا(1) |
| تمديد (قابل للتكرار) | يضيف كافة العناصر منiterableإلى الطرف الأيمن من deque. | على ما يرام) |
| تمديد اليسار (قابل للتكرار) | يضيف كافة العناصر منiterableإلى الطرف الأيسر من deque (ترتيب عكسي). | على ما يرام) |
| إزالة (القيمة) | يزيل التواجد الأول لـvalueمن ديك. يرفعValueErrorإذا لم يتم العثور عليها. | على) |
| تدوير (ن) | يدور dequenخطوات إلى اليمين. لوnهو سلبي يدور إلى اليسار. | على ما يرام) |
| واضح() | يزيل كافة العناصر من deque. | على) |
| العد (القيمة) | يحسب عدد مرات حدوثvalueفي ديك. | على) |
| الفهرس (القيمة) | إرجاع فهرس التواجد الأول لـvalueفي ديك. يرفعValueErrorإذا لم يتم العثور عليها. | على) |
| يعكس() | عكس عناصر deque في مكانها. | على) |
إلحاق وحذف العناصر Dequeue
- إلحاق (خ): يضيف x إلى الطرف الأيمن من deque.
- الملحق الأيسر (x): يضيف x إلى الطرف الأيسر من deque.
- تمديد (قابل للتكرار): يضيف كل العناصر من العنصر القابل للتكرار إلى النهاية اليمنى.
- تمديد اليسار (قابل للتكرار): يضيف كل العناصر من العنصر القابل للتكرار إلى الطرف الأيسر (بترتيب عكسي).
- إزالة (القيمة): إزالة التواجد الأول للقيمة المحددة من deque. إذا لم يتم العثور على القيمة، فسيظهر خطأ ValueError.
- البوب (): يزيل ويعيد عنصرًا من النهاية اليمنى.
- بوب يسار (): يزيل ويعيد عنصرًا من الطرف الأيسر.
- واضح(): يزيل كافة العناصر من deque.
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
- الفهرسة: الوصول إلى العناصر حسب الموضع باستخدام مؤشرات إيجابية أو سلبية.
- فقط(): إرجاع عدد العناصر في deque.
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
عد دوران وعكس deque
- العدد (القيمة): تقوم هذه الطريقة بحساب عدد مرات ظهور عنصر معين في القائمة.
- تدوير (ن): تقوم هذه الطريقة بتدوير deque بمقدار n من الخطوات. يدور n الموجب إلى اليمين ويدور n السالب إلى اليسار.
- يعكس(): تعمل هذه الطريقة على عكس ترتيب العناصر في القائمة.
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])