كورس C++ المتوسط – الحلقة العاشرة: Queue و Priority Queue
#برمجة
مقدمة
مرحباً بك في الحلقة العاشرة من المستوى المتوسط في C++.
في الحلقة السابقة تعلمنا:
- Doubly Linked List
- Stack
- push
- pop
- top
- تطبيقات Undo / Redo
واليوم سنتعلم هيكلين مهمين جداً من هياكل البيانات:
Queue
و
Priority Queue
وهما مستخدمان في:
- أنظمة المستشفيات
- أنظمة الحجز
- إدارة الطابور
- أنظمة التشغيل
- الألعاب
- الشبكات
ما هي Queue؟
Queue تعني:
الطابور
وتعمل بمبدأ:
First In First Out
اختصاراً:
FIFO
مثال من الحياة
طابور في البنك:
Ahmed
Ali
Khaled
أول شخص دخل هو أول شخص يخرج.
الفرق بين Queue و Stack
Stack
آخر داخل = أول خارج
LIFO
Queue
أول داخل = أول خارج
FIFO
إضافة مكتبة Queue
#include <queue>
إنشاء Queue
queue<int> numbers;
إضافة عناصر
numbers.push(10);
numbers.push(20);
numbers.push(30);
الشكل
10 20 30
أول عنصر
cout << numbers.front();
الناتج
10
آخر عنصر
cout << numbers.back();
الناتج
30
حذف أول عنصر
numbers.pop();
يصبح
20 30
مثال كامل
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> numbers;
numbers.push(10);
numbers.push(20);
numbers.push(30);
cout << "Front: "
<< numbers.front()
<< endl;
numbers.pop();
cout << "New Front: "
<< numbers.front();
return 0;
}
معرفة عدد العناصر
cout << numbers.size();
التحقق إذا كان فارغاً
if(numbers.empty())
{
cout << "Empty";
}
المرور على Queue
لا يمكن الوصول للعناصر مباشرة مثل Vector.
نستخدم نسخة مؤقتة:
queue<int> temp = numbers;
مثال
while(!temp.empty())
{
cout << temp.front() << endl;
temp.pop();
}
مشروع عملي: نظام انتظار العملاء
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<string> customers;
customers.push("Ahmed");
customers.push("Ali");
customers.push("Khaled");
while(!customers.empty())
{
cout << "Serving: "
<< customers.front()
<< endl;
customers.pop();
}
return 0;
}
الناتج
Serving: Ahmed
Serving: Ali
Serving: Khaled
ما هي Priority Queue؟
في بعض الأنظمة لا نريد:
أول داخل = أول خارج
بل نريد:
الأهم أولاً
مثال
في المستشفى:
مريض عادي
مريض طارئ
المريض الطارئ يجب أن يدخل أولاً.
إنشاء Priority Queue
priority_queue<int> pq;
إضافة عناصر
pq.push(10);
pq.push(50);
pq.push(20);
pq.push(100);
أعلى أولوية
cout << pq.top();
الناتج
100
لماذا؟
لأن Priority Queue ترتب العناصر تلقائياً.
مثال كامل
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> pq;
pq.push(10);
pq.push(50);
pq.push(20);
pq.push(100);
while(!pq.empty())
{
cout << pq.top() << endl;
pq.pop();
}
return 0;
}
الناتج
100
50
20
10
Priority Queue تصاعدية
افتراضياً:
الأكبر أولاً
يمكن جعلها:
الأصغر أولاً
الكود
priority_queue<
int,
vector<int>,
greater<int>
> pq;
مثال
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main()
{
priority_queue<
int,
vector<int>,
greater<int>
> pq;
pq.push(10);
pq.push(50);
pq.push(5);
while(!pq.empty())
{
cout << pq.top() << endl;
pq.pop();
}
return 0;
}
الناتج
5
10
50
تطبيق عملي: نظام مهام
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> tasks;
tasks.push(1);
tasks.push(5);
tasks.push(10);
cout << "Next Task Priority: "
<< tasks.top();
return 0;
}
أين تستخدم Queue؟
✔ أنظمة الحجز
✔ مراكز الاتصال
✔ الطابعات
✔ تحميل الملفات
✔ أنظمة الرسائل
أين تستخدم Priority Queue؟
✔ المستشفيات
✔ أنظمة التشغيل
✔ الذكاء الاصطناعي
✔ الألعاب
✔ جدولة المهام
مقارنة Queue و Priority Queue
| Queue | Priority Queue |
|---|---|
| FIFO | حسب الأولوية |
| بسيط | أكثر ذكاءً |
| أول داخل أول خارج | الأعلى أولوية أولاً |
| أسرع قليلاً | أكثر مرونة |
أخطاء شائعة
❌ استخدام:
front()
على Queue فارغة.
❌ استخدام:
top()
على Priority Queue فارغة.
❌ نسيان:
empty()
قبل الوصول للعناصر.
تمارين
التمرين 1
أنشئ Queue تحتوي:
10
20
30
واطبع أول عنصر.
التمرين 2
احذف عنصرين باستخدام pop.
التمرين 3
اعرض جميع عناصر Queue.
التمرين 4
أنشئ Priority Queue تحتوي:
15
50
5
90
واطبع العناصر بالترتيب.
التمرين 5
اصنع نظام انتظار مرضى مع أولوية للحالات الطارئة.
ملخص الحلقة العاشرة
في هذه الحلقة تعلمنا:
- Queue
- FIFO
- push
- pop
- front
- back
- Priority Queue
- top
- الأولويات
- تطبيقات عملية
انتهى المستوى المتوسط الأساسي 🎉
المستوى القادم: C++ المتقدم (Advanced C++)
سنبدأ بـ:
🔥 Templates
🔥 Exception Handling
🔥 Smart Pointers
🔥 Lambda Functions
🔥 Multithreading
🔥 STL Advanced
🔥 مشاريع احترافية كبيرة
وهنا تبدأ مرحلة الاحتراف الحقيقية في لغة C++. 🚀

تعليقات
إرسال تعليق