46 lines
3.7 KiB
Markdown
46 lines
3.7 KiB
Markdown
|
---
|
||
|
title: Queues
|
||
|
localeTitle: ذيول
|
||
|
---
|
||
|
## طوابير
|
||
|
|
||
|
قائمة الانتظار هي أول بنية بيانات أول (OutO) (FIFO). تستخدم العديد من الخوارزميات قوائم انتظار في جوهرها لتحسين الأداء.
|
||
|
|
||
|
قائمة الانتظار هي واحدة من أنواع البيانات التجريدية الأساسية (ADT). يشبه الطوابير لدينا في الأفلام أو محلات السوبر ماركت. سيتم تقديم أول شخص يصل أولا الحق؟ وبالمثل ، سيتم إزالة العنصر الأول الذي سيتم إدراجه أولاً. هناك عدة أنواع من الطوابير مثل ،
|
||
|
|
||
|
1. قائمة انتظار بسيطة (أو قائمة انتظار)
|
||
|
2. قائمة انتظار دائري
|
||
|
3. طابور الأولوية
|
||
|
4. Dequeue (Double Ended Queue)
|
||
|
|
||
|
إذا استطعت أن تفهم الطابور البسيط (الذي سيشار إليه من هنا باسم "قائمة الانتظار") ، فسيكون كل الآخرين سهلا بنفس القدر ، مع القليل من التعديلات.
|
||
|
|
||
|
معظم العمليات الشائعة المتاحة في قائمة الانتظار هي ،
|
||
|
|
||
|
1. إضافة / عرض - لإدراج عنصر في نهاية قائمة الانتظار.
|
||
|
2. Remove / Poll - إزالة عنصر من بداية قائمة الانتظار.
|
||
|
3. Peek - إرجاع العنصر في بداية قائمة الانتظار ولكن لن يتم إزالته.
|
||
|
4. Size / Count - لإرجاع عدد العناصر الموجودة حاليًا في قائمة الانتظار.
|
||
|
5. IsEmpty - تحقق مما إذا كانت قائمة الانتظار فارغة أم لا.
|
||
|
|
||
|
يمكن تنفيذ قائمة الانتظار باستخدام إما المصفوفات أو القوائم المرتبطة. فيما يلي تنفيذ مجموعة بسيطة من بنية بيانات قائمة الانتظار مع عملياتها الأكثر شيوعًا.
|
||
|
|
||
|
\`\` \`جافا سكريبت
|
||
|
var Queue = function () { var queue = \[\]؛ var front = 0؛ var back = 0؛ إرجاع { isEmpty: function () { عودة الجبهة> = العودة || queue.length === 0؛ }، add: function (elem) { / \* يمكنك أيضًا إجراء queue.push (elem) في JavaScript. هذا كيف يفعلون ذلك بلغات أخرى \* / قائمة الانتظار \[العودة ++\] = elem؛ }، remove: function () { إذا (! this.isEmpty ()) { قائمة انتظار العودة \[front ++\]؛ // أو queue.shift () } else { خطأ جديد ("Queue is Empty.")؛ } }، نظرة خاطفة: الوظيفة () { إذا (! this.isEmpty ()) { قائمة انتظار العودة \[front\]؛ } } } }؛
|
||
|
|
||
|
var queue = new Queue ()؛ console.log (queue.isEmpty ())؛ // صحيح queue.add (1)؛ queue.add (2)؛ console.log (queue.remove ())؛ // 1 console.log (queue.peek ())؛ // 2 console.log (queue.remove ())؛ // 2 console.log (queue.remove ())؛ // استثناء \`\` \`
|
||
|
|
||
|
#### تطبيقات
|
||
|
|
||
|
* محاكاة
|
||
|
* الجدولة (جدولة المهام ، جدولة الأقراص)
|
||
|
* إدارة الموارد المشتركة
|
||
|
* لوحة المفاتيح المخزن المؤقت
|
||
|
* اتساع البحث أولا
|
||
|
* للتعامل مع الازدحام في الشبكة
|
||
|
|
||
|
#### معلومات اكثر:
|
||
|
|
||
|
* [مزيد من المعلومات عن طوابير - GeeksForGeeks](http://www.geeksforgeeks.org/queue-data-structure/)
|
||
|
* [حل التحديات باستخدام قوائم الانتظار - Hackerrank](https://www.hackerrank.com/domains/data-structures/queues)
|
||
|
* [HackerRank الأكوام و الطوابير الفيديو](https://www.youtube.com/watch?v=wjI1WNcIntg)
|