قائمة الانتظار Queue
ماذا تعني "قائمة الانتظار Queue" في البرمجة ..؟؟!! وفيما تستخدم الـ Queue ...؟؟!! وكيف يتم ترجمة الـ Queue من خلال العمليات البرمجية ..؟؟
تعدُّ الـ Queue أحدى هياكل البيانات (Data Structure) الأساسية في علوم الحاسوب، وتستخدم عادةً في تطبيقات التحكُّم في التدفق، وفي العديد من المجالات الأخرى مثل الذكاء الاصطناعي وتقنية المعلومات. وفي هذا المقال سنتحدث عن مفهوم الـ Queue وكيفية استخدامها في البرمجة لنبدأ……
في هذا المقال سنتعرف على :
- مفهوم الـ Queue ..؟؟
- استخدامات الـ Queue .
- عمليات الـ Queue.
- تنفيذ الـ Queue.
- الـ Queue و هياكل البيانات الأخرى.
- ملخص الـ Queue.
ماهو الـ Queue ..؟؟
تعدُّ الـ Queue أو قائمة الانتظار من نوع هياكل البيانات (Data Structure ) الخطية والـQueue على المستوى المنطقي (أو ADT) هي مجموعة مرتبة من العناصر المتجانسة، بحيث تتم عملية إضافة وإزالة العناصر من الأطراف فقط فإضافة العناصر الجديدة تتم في الجزء الخلفي ، و بينما تتم عملية إزالة العناصر من الجزء الأمامي. ويسمى ترتيب العمليات للـ Queue بـ FIFO اختصاراً للـ (First in, first out) بمعنى أن العنصر الذي يصل أولاً سينتهي معالجتة أولاً.و ويوضح الشكل التالي طريقة عمل الـ Queue :
استخدامات الـ Queue
تعتبر الـ Queue أساسية في العديد من الإطارات والمكتبات، مثل لغة Python و Java و C++. وتستخدم queue في تقديم الخدمات للعملاء وإدارة الأحداث في تطبيقات الويب والمواقع، وفي العديد من التطبيقات الأخرى في مجالات مثل الألعاب والروبوتات والإلكترونيات والتحكم في العمليات الصناعية. ,و تستخدم الـ Queue في البرمجة عادةً في العديد من التطبيقات، مثل:
- مجموعة العمليات: تستخدم الـ Queue في تنظيم العمليات التي يجب تنفيذها في ترتيب محدد. وتتمثل هذه العمليات في العادة في الاستجابة للطلبات الواردة من المستخدمين.
- محاكاة الأحداث: تستخدم الـ Queue في تنظيم الأحداث المتعلقة بالمحاكاة، حيث يتم استخدامها لتنظيم تسلسل الأحداث وضمان تنفيذها بالترتيب الصحيح.
- العمليات المتوازية: تستخدم الـ Queue في تنظيم العمليات المتوازية التي يجب تنفيذها في ترتيب محدد. ويتم استخدام الـ Queue في هذه الحالة لتنظيم التحكم في التدفق وضمان عدم وجود تداخل بين العمليات.
- تحميل الملفات: تستخدم الـ Queue في تنظيم تحميل الملفات عبر الإنترنت، حيث يتم استخدامها لتنظيم تحميل الملفات وضمان تحميلها بالترتيب الصحيح.
- خدمات الشبكة: تستخدم الـ Queue في تنظيم الحزم الواردة عبر الشبكة والتي يتم تحويلها إلى المستخدمين. ويتم استخدام الـ Queue في هذه الحالة لتنظيم تسلسل الحزم وضمان تسليمها بالترتيب الصحيح.
ويتضح لنا مماسبق أن الـ queue تُستخدم في العديد من التطبيقات البرمجية، مثل الطوابير والمهام الحيوية وتحميل البيانات عبر الإنترنت، وتساعد في تبسيط وتحسين الأداء وإدارة العمليات في البرامج. وسوف نتعرف فيما يلي على أهم عمليات الـ queue، بما في ذلك الإضافة والحذف والبحث والوصول إلى العناصر في الـ queue، بالإضافة إلى بعض الأمثلة العملية لاستخدام الـ queue في البرمجة.
عمليات الـ Queue
يتم تنفيذ الـ Queue باستخدام مجموعة من العمليات، أهمها عمليتين هما اضافة العناصر الى الـ Queue و حذف العناصر من الـ Queue :
Enqueue:
هذه العملية تستخدم لإدخال عنصر جديد في نهاية الـ Queue. وتتضح في الشكل التالي:
Dequeue:
هذه العملية تستخدم لإخراج العنصر الأول في بداية الـ Queue. كما يوضح الشكل التالي :
هنالك ايضاً عدد من العمليات التي يمكن أن تعمل على الـ Queue ومنها التالي:
- MakeEmpty: وبها يتم يضبط حالة الـ Queue إلى حالة فارغة.
- Peek: هذه العملية تستخدم لاستعراض العنصر الأول في بداية الـ Queue دون إخراجه من الـ Queue.
- IsEmpty: تحقق ما إذا كانت حالة الـ Queue فارغة حاليًا.
- isFull: تحقق ما إذا كانت حالة الـ Queue ممتلئة حاليًا.
تنفيذ الـ Queue
يمكن تنفيذ الـ Queue في العديد من لغات البرمجة، مثل C++, Python، و Java، C# ويتم تنفيذها عادةً باستخدام مكتبات البرمجة الخاصة بهذه اللغات. وفيما يلي مثال بسيط يوضح كيفية استخدام الـ Queue في لغة الـ C#:
using System;
using System.Collections;
class program {
public static void Main(String [] arge)
{
Queue<string> MyQueue = new Queue<string>();
MyQueue.Enqueue("Monday");
MyQueue.Enqueue("Tuesday");
MyQueue.Enqueue("Wednesday");
MyQueue.Enqueue("Thursday");
MyQueue.Enqueue("Friday");
MyQueue.Enqueue("Saturday");
MyQueue.Enqueue("Sunday");
Console.WriteLine(MyQueue.Peek());
foreach (string i in MyQueue)
Console.Write(i + " ");
Console.WriteLine();
MyQueue.Dequeue();
Console.WriteLine(MyQueue.Peek());
}
}
هنا مثال آخر للتطبيق الـ Queue في لغة ؛Python حيث نستخدم put() لإضافة العناصر و get() لحذف العناصر
...........
# import the Queue module
import queue
# create a new Queue object
q = queue.Queue()
# add elements to the Queue
q.put(1)
q.put(2)
q.put(3)
# Print the Queue size
print(q.qsize())
# remove the first element from the Queue
print(q.get()) # Output: 1
...........
الـ Queue و هياكل البيانات الأخرى
من مميزات الـ Queue انه يمكن تنفيذها بواسطة هياكل بيانات أخرى، فيما يلي بعض الأمثلة لهياكل البيانات التي يمكن استخدامها لتنفيذ الـ Queue:
1. قوائم المرتبطة المزدوجة (Doubly Linked Lists):
تعد القوائم المرتبطة المزدوجة ثنائية الاتجاه فهي قوائم مرتبطة تتكون من عقدتين مرتبطتين بكل عقدة. (أكثر عنها في مقال عن Linked-List) يمكن استخدام قوائم الربط ثنائية الاتجاه لتنفيذ الـ Queue حيث يمكن إضافة العناصر الجديدة من نهاية الـ Queue واستخراجها من بدايتها بسهولة. تتيح هذه الهيكلة المزايا مثل الوصول السريع إلى العناصر المجاورة وإمكانية إزالة العناصر من نهاية الـ Queue بسرعة أيضًا.
2. المكدس (Stack):
على الرغم من أن فكرة Stack تقوم على "اأن من يضاف اخيراً يكون أول ما يخرج" (Last-In, First-Out)، (المزيد في مقال عن Stack) إلا أنه يمكن استخدامه بشكل معكوس لتنفيذ الـ Queue. يمكن استخدام اثنين من المكدسات لتنفيذ الـ Queue، حيث يتم تكديس العناصر في مكدس واحد (المكدس الأول) ، ثم استخراجها من المكدس الآخر (المكدس الثاني) بحيث يتم تنفيذ العناصر بالترتيب الصحيح.
المصفوفات (Arrays):
يمكن استخدام المصفوفات لتنفيذ الـ Queue أيضًا. يتم استخدام مؤشرين لتحديد موقع البداية والنهاية في الـ Queue بداخل المصفوفات . عند إضافة عنصر جديد، يتم وضعه في مؤشر النهاية وزيادة قيمة المؤشر بواحد، وعند استخراج العنصر، يتم استخدام مؤشر البداية للوصول إلى العنصر ومن ثم زيادة قيمة المؤشر بواحد.
تذكر أن اختيار الهيكل البيانات المناسب لتنفيذ الـ Queue يعتمد على احتياجات محددة مثل كفاءة الوقت والمساحة، ونوع العمليات التي ستتم على الـ Queue (إضافة واستخراج العناصر)، ومتطلبات التطبيق المحددة.
ملخص الـ Queue
تعتبر الـ queue من الهياكل البيانات الأساسية في البرمجة، حيث تستخدم لتخزين وتنظيم مجموعة من العناصر المرتبة والتي يتم الوصول إليها بشكل خطي، ومن الممكن إضافة عناصر جديدة إلى نهاية الـ queue وإزالة العناصر من بدايتها، في هذا الفيديو يشرح مفهوم الـ queue في البرمجة وأهم عمليات الـ queue.
وبهذا نكون قد وصلنا الى نهاية هذا المقال الذي تعرفنا من خلاله على مفهوم الـ Queue واستخداماتها في البرمجة، كما تحدثنا عن بعض العمليات الأساسية التي يمكن تنفيذها باستخدام الـ Queue. وتظل الـ Queue من الهياكل الأساسية التي يجب على كل مبرمج معرفتها واستخدامها بشكل جيد في تطوير البرامج والتطبيقات.