使用Array实现QUEUE

时间:2015-12-22 18:26:13

标签: c++ queue

在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

2 个答案:

答案 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]<<" ";}

无论如何我会用指针实现它。