#include<iostream>
#include<string.h>
using namespace std;
class queue
{
int f,r;
int a[5];
public:
queue()
{
f=r=-1;
}
在数组中插入元素
void enqueu(int n)
{
if(r==4)
cout<<"Overflow"<<endl;
else
{
r++;
a[r]=n;
}
if(f==-1)
f=0;
}
从数组中删除元素
void dequeu()
{
if(f==-1)
cout<<"Underflow"<<endl;
else if(f==4)
f=-1;
else
{
cout<<"The Deleted Element is "<<a[f]<<endl;
f++;
}
}
当我尝试显示Array的元素时。我删除的元素也会出现。
void show()
// showing array elements
{
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
}
};
int main()
{
queue obj;
int n,num;
我在这里使用do,这将继续询问是否插入或删除。
do
{
cout<<"1: Insert Element In Queue"<<" 2: Delete Element "<<" 3:Press 0 to Exit<<endl;
cin>>n;
switch(n)
{
case 1:
{
cout<<"Enter Element to insert"<<endl;
cin>>num;
obj.enqueu(num);
break;
}
case 2:
{
obj.dequeu();
break;
}
}
}
while(n!=0);
obj.show();
return 0;
}
答案 0 :(得分:1)
enqueu()
和dequeu()
看起来好像容器中有多少元素由成员f
和r
决定。但是你的show()
会忽略它们,只打印所有五个数组元素。
答案 1 :(得分:0)
这两项功能dequeue
和show
都是错误的。
删除元素时,应将所有剩余元素向左移动。
因此,在dequeue中,f永远不能等于4.它等于-1或等于0.所以我会按以下方式重写函数:
void dequeu()
{
if ( r == -1 )
{
cout<<"Underflow"<<endl;
}
else
{
cout << "The Deleted Element is " << a[f] << endl;
for ( int i = f; i < r; i++ ) a[i] = a[i+1];
if ( --r == -1 ) f = r;
}
}
函数show应该只输出那些作为队列实际元素的元素
void show() const
// showing array elements
{
for ( int i = f; i < r + 1; i++ ) cout << a[i] << endl;
}