队列——数组实现

#include<iostream>
#include<assert.h>
using namespace std;
typedef int TypeData;

class SeqQueue
{
 private:
 int rear,front;
 TypeData *elements;
 int maxSize;

 public:
 SeqQueue(int sz=21);
 ~SeqQueue();
 bool EnQueue(const TypeData& x);
 bool DeQueue(TypeData& x);
 bool getFront(TypeData& x);
 void makeEmpty(){front=rear=0;}
 bool IsEmpty() const {return (front==rear)?true:false;}
 bool IsFull()const {return((rear+1)%maxSize==front)?true:false;}
 int getSize() const{return (rear-front+maxSize)%maxSize;}
 void const TranElement();
 
};

//==============================
SeqQueue::SeqQueue(int sz)
{
 front=0;
 rear=0;
 maxSize=sz;
 elements=new TypeData[maxSize];
 assert(elements!=NULL);
}
SeqQueue::~SeqQueue()
{
 delete[] elements;
}
bool SeqQueue::EnQueue(const TypeData& x)
{
 if(IsFull()==true)return false;
 elements[rear]=x;
 rear=(rear+1)%maxSize;
 return true;
}
bool SeqQueue::DeQueue(TypeData& x)
{
 if(IsEmpty()==true)return false;
 x=elements[front];
 front=(front+1)%maxSize;
 return true;
}
bool SeqQueue::getFront(TypeData& x)
{
 if(IsEmpty()==true)return false;
 x=elements[front];
 return true;
}
void const SeqQueue::TranElement()
{
 if(IsEmpty()==false)
 {
  int t=getSize();
  for(int y=0;y<t;y++)
  cout<<" "<<elements[y];
 }
}

void main()
{
 int n,m,i,j,k;
 SeqQueue mylink;
 cout<<"构造循环队列list1,请确定数组元素个数(1-20):";cin>>n;
 cout<<"请输入元素:";
 for(i=0;i<n;i++){cin>>m;mylink.EnQueue(m);}
 cout<<"由队头到队尾的顺序为:"<<endl;
 mylink.TranElement();
 cout<<" 总共有"<<mylink.getSize()<<"个元素"<<endl;
 while(true)
 {
  cout<<"请输入你想添加的元素(若输入'0'不添加!): ";cin>>j;
  if(mylink.IsFull()==false) cout<<"队列已经满了"<<endl;break;
  if(j!=0 && mylink.IsFull()==false) mylink.EnQueue(j);
  if(j==0) break;
 }
 cout<<"现在由队头到队尾的顺序为:"<<endl;
 mylink.TranElement(); 
 cout<<" 总共有"<<mylink.getSize()<<"个元素"<<endl;

 while(true)
 {
  cout<<"是否删除队头元素(若输入'0'不删除;输入'1'则删除): ";cin>>k;
  if(mylink.IsEmpty()==true){cout<<"队列中已经没元素了!"; break;}
  if(k!=0){mylink.DeQueue(k);}
  if(k==0) break;
 }
 if(mylink.IsEmpty()!=true)
 {
  cout<<" 现在由栈顶到栈底的顺序为:"<<endl;
  mylink.TranElement();
 }
 cout<<endl;
}

 


 

posted on 2008-10-26 08:22  ....11  阅读(303)  评论(0)    收藏  举报

导航