#include<iostream.h>
template<class T>
class SeqQueue
{
private:
T *element;
int size;
int front,rear;
public:
SeqQueue(int size=64);
~SeqQueue();
bool IsEmpty();
void EnQueue(T x);
T dequeue();
T length();
};
template<class T>
SeqQueue<T>::SeqQueue(int size)
{
this->size=size<64?64:size;
element=new T[this->size];
front=rear=0;
}
template<class T>
SeqQueue<T>::~SeqQueue()
{
delete []element;
}
template<class T>
bool SeqQueue<T>::IsEmpty()
{
return front==rear;
}
template<class T>
void SeqQueue<T>::EnQueue(T x)
{
if(front==(rear+1)%size)
{
T *temp=element;
element=new T[size*2];
int i=front,j=0;
while(i!=rear)
{
element[j]=temp[i];
i=(i+1)%size;
j++;
}
front=0;
rear=j;
size*=2;
}
element[rear]=x;
rear=(rear+1)%size;
}
template<class T>
T SeqQueue<T>::dequeue()
{
if(!IsEmpty())
{
T x=element[front];
front=(front+1)%size;
return x;
}
throw "空队列!";
}
template<class T>
T SeqQueue<T>::length()
{
if(!IsEmpty())
{
T x=rear-front;
return x;
}
throw "空队列!";
}
int main()
{
SeqQueue<int> Q;
int x,y,n,i,len;
cout<<"请输入队列长度:"<<endl;
cin>>n;
cout<<"请输入各元素的值:"<<endl;
for(i=0;i<n;i++)
{
cin>>x;
Q.EnQueue(x);
}
len=Q.length();
cout<<"当前有效元素的个数是"<<len<<endl;
cout<<"对头元素是:"<<endl;
y=Q.dequeue();
cout<<y;
return 0;
}