در این جلسه تیم کدگیت را با آموزش صف در سی پلاس پلاس همراهی کنید. این جلسه ابتدا در مورد صف توضیح میدهیم و سپس با کمک آرایه یک صف در سی پلاس پلاس پیاده سازی خواهیم کرد. همچنین پیش نیاز این آموزش شامل موارد زیر است:
صف
ما در فرآیندهای روزانه صفهای زیادی میبینیم مانند صف بانک یا صف نانوایی. حال ما میخواهیم با ویژگی صف آشنا شویم و سپس به پیاده سازی آن بپردازیم.
صف دارای دو ویژگی بارز است
- هر نفر برای اضافه شدن به صف باید به آخر صف برود.
- برای پاسخ به درخواست افراد درون صف به ابتدای صف مراجعه می کنید.

در سی پلاس پلاس برای نوع های مختلف میتوان یک صف تعریف کرد مثل String یا int یا … و یا حتی برای Objectهایی که خودمان تعریف میکنیم و میسازیم. در این جا ما به پیاده سازی صف از جنس int میپردازیم.
یک کلاس به نام Queue داریم که به صورت زیر است.
#define SIZE 1000
class Myqueue
{
int *arr;
int capacity;
int front;
int rear;
int count;
public:
Myqueue(int size = SIZE);
void dequeue();
void enqueue(int x);
int peek();
int size();
bool isEmpty();
bool isFull();
};
Myqueue::Myqueue(int size) {
arr = new int[size];
capacity = size;
front = 00;
rear = -1;
count = 00;
}
void Myqueue::dequeue() {
if (isEmpty()) {
cout << "UnderFlow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
cout << "Removing " << arr[front] << '\n';
front = (front + 1) % capacity;
count--;
}
void Myqueue::enqueue(int item) {
if (isFull()) {
cout << "OverFlow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
cout << "Inserting " << item << '\n';
rear = (rear + 1) % capacity;
arr[rear] = item;
count++;
}
int Myqueue::peek() {
if (isEmpty()) {
cout << "UnderFlow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
return arr[front];
}
int Myqueue::size() {
return count;
}
bool Myqueue::isEmpty() {
return (size() == 0);
}
bool Myqueue::isFull() {
return (size() == capacity);
}
در این کلاس از یک آرایه برای نگه داشتن اعضای صف استفاده کردیم.
سپس یک کلاس برای تست یک صف نیاز داریم.
int main() {
Myqueue q(5);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << "Front element is: " << q.peek() << endl;
q.dequeue();
q.enqueue(4);
cout << "Queue size is " << q.size() << endl;
q.dequeue();
q.dequeue();
q.dequeue();
if (q.isEmpty())
cout << "Queue Is Empty\n";
else
cout << "Queue Is Not Empty\n";
return 0;
}