在队列中,插入和删除后,删除的元素也出现在Output.why中?

时间:2014-03-01 16:05:40

标签: c++ class queue

#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;
  }

2 个答案:

答案 0 :(得分:1)

enqueu()dequeu()看起来好像容器中有多少元素由成员fr决定。但是你的show()会忽略它们,只打印所有五个数组元素。

答案 1 :(得分:0)

这两项功能dequeueshow都是错误的。

删除元素时,应将所有剩余元素向左移动。

因此,在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;
  }