队列——数组实现
#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;
}
浙公网安备 33010602011771号