队列是一个单向的操作,有两个端口队列的特点是先进先出,后进后出。
一下是链表模拟队列的过程:
#include<bits/stdc++.h>
using namespace std;
template<class T>
struct Node
{
T data;
Node *next;
};
template<class T>
class Tqueue
{
Node<T>*first,*en;
public:
Tqueue();///无参的构造函数
void pushx(T x);///队列中加入一个元素
T popx();///队列中删除一个元素
void print();///遍历输出队列里的元素
};
template<class T>
Tqueue<T>::Tqueue()
{
Node<T>*s;
s=new Node<T>;
s->next=NULL;
first=en=s;
}
template<class T>
void Tqueue<T>::pushx(T x)
{
Node<T>*s;
if(first==en)
{
s=new Node<T>;
s->data=x;
s->next=NULL;
first->next=s;
en->next=s;
en=s;
}
else
{
s=new Node<T>;
s->data=x;
s->next=NULL;
en->next=s;
en=s;
}
}
template<class T>
T Tqueue<T>::popx()
{
if(first==en)
throw"队列为空";
Node<T> *p;
p=first->next;
T x=p->data;
first->next=p->next;
if(p->next==NULL)
en=first;
delete p;
return x;
}
template<class T>
void Tqueue<T>::print()
{
Node<T> *p;
p=first->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
Tqueue<int>q;
int x;
while(cin>>x)
{
if(x==-3)
return 0;
else if(x==-2)
q.print();
else if(x==-1)
q.popx();
else if(x>=10&&x<=99)
q.pushx(x);
}
return 0;
}