在C ++中使用Array实现QUEUE
Dequeue功能似乎有些问题。 它不是从前面删除,而是从后面删除.. 我无法弄清楚出了什么问题。
请帮忙!
#include <iostream>
using namespace std;
#define MAX_SIZE 101
int A[MAX_SIZE];
int front=-1,rear=-1;
void Enq(int x)
{ if (rear==(MAX_SIZE-1))
{return;}
if (front==-1 && rear==-1)
{front=rear=0;}
else { rear=rear+1;}
A[rear]=x;
}
void Deq()
{ if (front == -1 && rear == -1)
{return;}
else if(front == rear)
{
front = rear = -1;
}
else
front++;
}
void Print()
{ cout<<"Queue is: ";
int count=(rear-front);
for(int i=0; i<=count; i++)
{ cout<<A[i]<<" ";
}
cout<<"\n";
}
int main()
{
Enq(2); Print();
Enq(3); Print();
Enq(5); Print();
Deq(); Print();
Deq(); Print();
Enq(24); Print();
return 0;
}
输出: 成功时间:0记忆:3460信号:0
队列是:2
队列是:2 3
队列是:2 3 5
队列是:2 3
队列是:2
队列是:2 3
答案 0 :(得分:0)
您正在显示计数元素,计算方式为:
int count=(rear-front);
制作时
front++
您只需显示少一个元素。但是你总是从0号位置开始。
for(int i=0; i<=count; i++)
{ cout<<A[i]<<" ";
}
也许你应该从“前线”开始,然后上升到“前线+计数”?
请记住,这个实现永远不会真正删除任何内容,无论你调用Deq()多少次,你都可以调用Enq()MAX_SIZE次。
编辑:如果您希望能够重复使用空格,您可以将元素添加到“前-1”位置,然后执行前 - ,仅当前面> 0时
答案 1 :(得分:0)
使用您的前后变量:
for(int i=front; i<=rear; i++) { cout<<A[i]<<" ";}
无论如何我会用指针实现它。