C++ Queues

در C++، Queue (صف) یک ساختار داده‌ای FIFO (First In, First Out) است، یعنی اولین عنصری که وارد می‌شود، اولین عنصری است که خارج می‌شود. STL کلاس آماده‌ای به نام queue دارد که مدیریت صف را بسیار ساده می‌کند.

🔹 1️⃣ ایجاد Queue

#include <iostream> #include <queue> using namespace std; int main() { queue<int> q; // ایجاد یک صف خالی return 0; }

🔹 2️⃣ اضافه کردن عناصر

q.push(10); // اضافه کردن عنصر به انتهای صف q.push(20); q.push(30); cout << "Front element: " << q.front() << endl; // اولین عنصر: 10 cout << "Back element: " << q.back() << endl; // آخرین عنصر: 30
  • ()push → اضافه کردن عنصر به انتهای صف

  • ()front → مشاهده عنصر اول

  • ()back → مشاهده عنصر آخر

🔹 3️⃣ حذف عناصر

q.pop(); // حذف اولین عنصر صف cout << "New front: " << q.front() << endl; // 20

توجه: ()pop مقدار حذف شده را برنمی‌گرداند؛ فقط حذف می‌کند.

🔹 4️⃣ بررسی وضعیت Queue

if(q.empty()) { cout << "Queue is empty" << endl; } cout << "Size: " << q.size() << endl; // تعداد عناصر موجود

🔹 5️⃣ استفاده از Queue با حلقه

#include <iostream> #include <queue> using namespace std; int main() { queue<int> q; q.push(1); q.push(2); q.push(3); while(!q.empty()) { cout << q.front() << " "; // مشاهده عنصر اول q.pop(); // حذف عنصر اول } return 0; }

📌 خروجی:

1 2 3

🔹 6️⃣ Queue با اولویت (Priority Queue)

  • STL کلاس priority_queue دارد که بزرگ‌ترین عنصر همیشه در رأس صف است.

#include <iostream> #include <queue> using namespace std; int main() { priority_queue<int> pq; pq.push(10); pq.push(30); pq.push(20); while(!pq.empty()) { cout << pq.top() << " "; // بزرگ‌ترین عنصر pq.pop(); } return 0; }

📌 خروجی:

30 20 10
  • برای کوچکتر بودن عنصر در رأس، می‌توان از:

priority_queue<int, vector<int>, greater<int>> pq;

🔹 7️⃣ نکات کلیدی

  • Queue یک FIFO است؛ یعنی اولین عنصر وارد شده، اولین خروجی را دارد.

  • دسترسی به میانه صف امکان‌پذیر نیست؛ فقط ابتدای صف (front) و انتهای صف (back).

  • Queue برای مدیریت پردازش‌ها، صف چاپگر، منابع و الگوریتم‌های BFS کاربرد دارد.

  • priority_queue برای صف با اولویت مناسب است که همیشه بزرگ‌ترین یا کوچک‌ترین عنصر در رأس باشد.

💡 خلاصه:
Queue در ++C یک ساختار داده‌ای ساده و کارآمد برای مدیریت داده‌ها به ترتیب ورود است. توابع push, pop, front, back, empty و size کنترل کامل صف را فراهم می‌کنند و برای صف‌های با اولویت، کلاس priority_queue STL قابل استفاده است.