Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الطابور (Queue)

آخر تحديث

للطابور طرفان نشطان. تنضم القيم الجديدة عند المؤخرة، وتغادر القيم من المقدمة، فتُخدَم أولًا القيمة التي انتظرت أطول مدة. هذا هو FIFO، وهو بالضبط سلوك الصف أمام شباك الخدمة: الانضمام من الخلف والخدمة من الأمام هو ما يجعل الانتظار عادلًا. اضغط على تشغيل في الأعلى وشاهد القيم تدخل من جهة وتخرج من الجهة الأخرى.

لأن كل طرف يُتابَع بفهرس أو مؤشر خاص به، فالعمليتان كلتاهما O(1) ولا تُزيح أي منهما بقية البيانات. لهذا يقف الطابور تحت كل ما يعالج العمل بترتيب الوصول: مهام الطباعة، وطوابير المهام والرسائل، ومخازن الطلبات المؤقتة، و البحث بالعرض الذي يزور الرسم البياني مستوى بعد مستوى لأنه يحفظ جبهته في طابور تحديدًا. انقل طرف الإزالة إلى الخلف وسيصبح لديك المكدس بدلًا منه.

تعقيد الوقت والمساحة

لطابور مبني على مخزن حلقي أو على قائمة مترابطة، وهما التنفيذان المعياريان:

العمليةالتعقيدملاحظات
الإدراج (enqueue)O(1)الكتابة عند المؤخرة وتقديم فهرس المؤخرة.
الإزالة (dequeue)O(1)القراءة عند المقدمة وتقديم فهرس المقدمة، دون أي إزاحة.
الاطّلاع على المقدمة (peek)O(1)قراءة قيمة المقدمة دون إزالتها.
البحثO(n)ليس هذا ما وُجد الطابور له: عليك تفريغه لتنظر في داخله.
المساحةO(n)خانة واحدة لكل قيمة منتظرة.

خطوة بخطوة

الخطوةما الذي يحدث
1يبدأ الطابور فارغًا، والمقدمة والمؤخرة تشيران إلى الخانة نفسها.
2يكتب الإدراج القيمة عند المؤخرة، ثم يقدّم المؤخرة خانة واحدة.
3كل إدراج تالٍ يستقر خلف القيم المنتظرة أصلًا.
4تقرأ الإزالة القيمة عند المقدمة، ثم تقدّم المقدمة خانة واحدة.
5القيمة العائدة هي دائمًا القيمة التي انتظرت أطول مدة.
6عندما تلتقي المقدمة بالمؤخرة يعود الطابور فارغًا، وأي إزالة بعد ذلك خطأ.

مثال محلول

إدراج 3 و7 و5 ثم تفريغ الطابور:

العمليةالطابور (من المقدمة إلى المؤخرة)ما يعيده
enqueue(3)[3]لا شيء
enqueue(7)[3, 7]لا شيء
enqueue(5)[3, 7, 5]لا شيء
dequeue()[7, 5]3، أقدم قيمة
dequeue()[5]7
dequeue()[]5، أحدث قيمة، وتأتي أخيرًا

متى تستخدم الطابور

استخدمه عندماتجنّبه عندما
يجب معالجة العمل بترتيب الوصول: طوابير المهام، ومخازن الطلبات المؤقتة، ومُخزِّنات الطباعةتحتاج إلى أحدث عنصر أولًا، وهذا عمل المكدس
تستكشف مستوى بعد مستوى، كما يفعل البحث بالعرضيجب خدمة العناصر بالأولوية لا بترتيب الوصول، وهنا تناسب الكومة
يعمل منتج ومستهلك بسرعتين مختلفتين ويحتاجان إلى مخزن مؤقت بينهماتحتاج إلى البحث أو الفهرسة في منتصف البيانات
تريد إدراجًا وإزالة بـ O(1) دون إزاحة العناصرستنفّذه بإزاحة مصفوفة عند كل إزالة، مما يجعله O(n)

كود Queue

تنفيذ نظيف وقابل للتشغيل لخوارزمية Queue بلغات Python, JavaScript, Java, C++, C. اختر لغة، وانسخ الكود، أو افتحه محمّلًا مسبقًا في ساحة تجربة Coddy.

كود Queue بلغة Python

Python
1from collections import deque2
3queue = deque()4
5# Enqueue three values at the rear6for value in [3, 7, 5]:7    queue.append(value)8    print(f"enqueue {value} -> {list(queue)}")9
10# Dequeue them from the front: first in, first out11while queue:12    value = queue.popleft()13    print(f"dequeue {value} -> {list(queue)}")14
15print("empty:", len(queue) == 0)
شغّل هذا الكود في ساحة تجربة Python

الأسئلة الشائعة حول الطابور

ماذا تعني FIFO؟
الوارد أولًا يخرج أولًا: القيمة التي انتظرت أطول مدة هي التالية في الخدمة. الصف أمام شباك التذاكر هو الصورة اليومية. المكدس هو الانضباط المعاكس، أي LIFO.
ما الفرق بين الطابور والمكدس؟
الطرف الذي تزيل منه فقط. كلاهما يضيف عند المؤخرة بـ O(1)، لكن الطابور يزيل من المقدمة (FIFO) بينما يزيل المكدس من الطرف نفسه الذي أضاف إليه (LIFO). وجدولا التعقيد لديهما متطابقان فيما عدا ذلك.
ما هي عمليات الطابور الأساسية؟
تضيف enqueue قيمة عند المؤخرة، وتزيل dequeue قيمة المقدمة وتعيدها، ويقرأ peek (أو front) المقدمة دون إزالتها، ويخبرك is_empty بما إذا كان هناك شيء ينتظر. العمليات الأربع كلها O(1).
لماذا تكون الإزالة بطيئة إن استخدمت مصفوفة عادية؟
لأن إزالة الفهرس 0 من مصفوفة تُزيح كل عنصر متبقٍ إلى اليسار، فتصبح كل إزالة O(n). تتجنب التنفيذات الحقيقية ذلك بمخزن حلقي يقدّم فهرس المقدمة، أو بقائمة مترابطة لها مؤشر رأس. ويفعل هذا نيابةً عنك collections.deque في بايثون وArrayDeque في جافا، بينما لا يفعله list.pop(0).
ما هو الطابور الدائري؟
طابور داخل مصفوفة ثابتة الحجم يلتف فيها فهرسا المقدمة والمؤخرة عائدين إلى 0 عندما يتجاوزان النهاية. يعيد استخدام الخانات التي حرّرتها عمليات الإزالة، فيظل طابور سعته n يعمل إلى ما لا نهاية بدل أن يخرج عن نهاية المصفوفة.
أين تُستخدم الطوابير في البرامج الحقيقية؟
طوابير المهام والرسائل بين الخدمات، ومُخزِّنات الطباعة والمهام، ومخازن الطلبات المؤقتة في خوادم الويب، ومخازن لوحة المفاتيح والأحداث المؤقتة، وخطوط المنتج والمستهلك، و البحث بالعرض، حيث الطابور هو ما يجعل الاجتياز يمضي مستوى بعد مستوى.
Coddy programming languages illustration

أتقن الخوارزميات مع Coddy

ابدأ الآن