【发布时间】:2015-11-03 18:44:48
【问题描述】:
我编写了以下 C++ 代码来实现队列数据结构。但是,我有两个问题:
每当我删除前面的元素时,它都可以正常工作。但是,当我按 2 删除前面的元素时,即使队列为空,我也会收到一条消息说 “队列为空”,下一行是 5。如何防止 5 出现?为什么会出现?
当我完全填满队列并想要显示内容时,队列正在无限打印而不会停止。我认为显示函数中的 for 循环有问题。当队列未满时,显示功能正常工作。我该如何解决这个问题?
我的代码:
#include<iostream>
using namespace std;
int data;
class queue {
private:
int front,rear,capacity,a[100];
public:
queue(int n)
{
rear=front=-1;
capacity=n;
}
void enqueue(int n)
{
if(front==-1)
{
front++;
rear=front;
a[front]=n;
return;
}
if(rear%capacity==(front-1)%capacity)
{
cout<<"Queue is full\n";
return;
}
rear=(rear+1)%capacity;
a[rear]=n;
}
int dequeue()
{
if(front==rear&&front==-1)
{
cout<<"Queue is empty";
return 0;
}
if(front==rear&&front!=-1)
{
data=a[front];
front=rear=-1;
return data;
}
data=a[front];
front=(front+1)%capacity;
return data;
}
void display()
{
int i;
for(i=front;i!=rear+1;i=(i+1)%capacity)
cout<<a[i]<<endl;
}
};
main()
{
int x,y,c;
cout<<"Enter capacity\n";
cin>>c;
queue q(c);
while(1)
{
cout<<"Select option 1.insert 2.delete 3.display 4.exit\n";
cin>>x;
switch(x)
{
case 1: cout<<"Enter the element\n";
cin>>y;
q.enqueue(y);
break;
case 2: q.dequeue();
break;
case 3: q.display();
break;
case 4: exit(0);
}
}
return 0;
}
谢谢!!
【问题讨论】:
-
问题1说“当我按3删除前面的元素时”但是2是删除命令,3是显示。这是描述中的错误,还是意味着如果您删除直到队列为空,然后显示您看到“5”是剩余数据?这表明显示循环存在另一个问题。
-
是的,对不起。修好了!
-
区分一个满队和一个空队的困难提醒我们天才和精神错乱之间的细微差别。
标签: c++ data-structures