Я пытаюсь реализовать очередь, используя массив.Вот мой код:
#include <iostream.h>
#define SIZE 5
class queue
{
int *Queue, front, rear;
public:
queue() {
Queue = new int[SIZE];
front = rear = -1;
}
void push() {
if (rear == (SIZE-1)) {
cout<<"\n Overflow!";
} else {
rear++;
cout<<"\n Enter element: ";
cin>>Queue[rear];
}
}
void pop() {
if (front == rear) {
cout<<"\n Underflow!";
} else {
cout<<"\nElement popped: "<<Queue[++front];
}
}
void display() {
if (front == rear) {
cout<<"\n Queue Empty";
} else {
for(int i = (front+1); i<=rear; i++) {
cout<<Queue[i]<<" ";
}
}
}
};
int main()
{
int choice;
queue q;
while(choice != 4)
{
cout<<"\n\n Enter your choice :"
<<"\n 1. Push an element into Queue."
<<"\n 2. Pop an element from Queue."
<<"\n 3. Display the Queue."
<<"\n 4. Exit the program.\n\n";
cin>>choice;
switch (choice) {
case 1:
q.push();
break;
case 2:
q.pop();
break;
case 3:
q.display();
break;
case 4:
break;
}
}
return 0;
}
Дело в том, что как только переполнение встречается, даже после выталкивания элемента задняя часть остается прежней, и другой элемент не добавляется, когда есть свободное место, куда он может пойти.
Решением для этого может быть смещение каждого элемента на одно место вперед, чтобы в конце было пустое место, но у меня возникли проблемы со сдвигом.Кроме того, если я попытаюсь вставить после всплывающего сообщения 2-3 раза до достижения переполнения, это все равно дает переполнение, даже если в очереди только 3 элемента.Как я могу решить это?