قوائم الانتظار وcollections.deque
الإضافة والحذف بسرعة من الطرفين
قوائم الانتظار وcollections.deque درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
أول ما يدخل، أول ما يخرج
الطابور يخدم العناصر بالترتيب الذي وصلت به، مثل صف الانتظار في متجر. فأول عنصر يدخل هو أول عنصر يخرج.
لماذا لا نستخدم قائمة
يمكن للقائمة إزالة عنصر من المقدمة، لكن pop(0) يستغرق O(n) لأن كل عنصر آخر يتحرك خطوة إلى اليسار. وهذا بطيء جدًا للمدخلات الكبيرة.
q = []
q.pop(0) # O(n), avoid thisتعرّف إلى collections.deque
إن deque من collections هو طابور مزدوج الطرف يضيف العناصر ويزيلها من الطرفين خلال O(1). وهو خيارك المفضل في المسابقات.
from collections import deque
q = deque()الإضافة إلى الخلف
أضف العناصر الجديدة إلى الطرف الأيمن باستخدام append، تمامًا كما تفعل مع القائمة. وهذا هو مؤخر الطابور.
q.append(1)
q.append(2)الإزالة من المقدمة
أزل أقدم عنصر من اليسار باستخدام popleft، فهذه العملية تعمل في زمن ثابت وتحقق سلوك FIFO الحقيقي.
first = q.popleft() # returns 1كلا الطرفين مفتوحان
يدعم deque أيضًا appendleft وpop من اليمين. وتتيح هذه المرونة للبنية نفسها أن تعمل كمكدس أو كطابور.
q.appendleft(0)
last = q.pop()تحقق قبل الإزالة
تؤدي الإزالة من deque فارغ إلى حدوث خطأ، لذا اختبر while q داخل الحلقات للحفاظ على أمان عملية المرور.
while q:
x = q.popleft()الطوابير تشغّل BFS
الاستخدام الأكثر شيوعًا في المسابقات هو BFS. تضع عقدة البداية في الطابور، ثم تواصل إزالة العنصر من المقدمة وإضافة جيرانه.
هيكل BFS صغير
تزور هذه الحلقة العقد طبقة بعد طبقة. وتُضاف كل عقدة مجاورة، ثم تُعالج لاحقًا حسب ترتيب وصولها.
while q:
node = q.popleft()
for nb in graph[node]:
q.append(nb)حدّد حجم deque
يؤدي تمرير maxlen إلى جعل deque يتخلص من أقدم عنصر عند امتلائه، وهو مثالي للنوافذ المنزلقة وتتبع السجل الحديث.
window = deque(maxlen=3)بنية واحدة وأدوار متعددة
تذكّر أن deque سريع من الطرفين، لذا استخدمه كلما احتجت إلى طابور أو مكدس أو مخزن منزلق.
تحقق سريع
تحتاج إلى إزالة سريعة من مقدمة طابور. أي خيار مناسب؟
مراجعة: deque هو الطابور السريع
تعرّفت إلى collections.deque: استخدم append وpopleft لتحقيق FIFO بزمن O(1)، مع إتاحة كلا الطرفين وmaxlen للنوافذ. وهو العمود الفقري لـ BFS. 🎯
الأسئلة الشائعة
هل درس «قوائم الانتظار وcollections.deque» مجاني؟
نعم — نص درس «قوائم الانتظار وcollections.deque» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «قوائم الانتظار وcollections.deque»؟
الإضافة والحذف بسرعة من الطرفين تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «قوائم الانتظار وcollections.deque»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المكدسات لمطابقة الأقواس
- المكدس الرتيب: العنصر الأكبر التالي
- قوائم الانتظار وcollections.deque
- أقصى قيمة في النافذة المنزلقة باستخدام Deque