队列 限定在表尾和表头进行插入和删除操作的线性表。 队列的操作特点: 先进先出。 顺序队列的基本操作
#include <iostream> using namespace std; template <class T> class seqqueue{ public: seqqueue(); ~seqqueue(){ }; void push(T x); T pop(); T getpop(); int Empty(); private: T data[100]; int rear,front1; }; //构造 template <class T> seqqueue<T>::seqqueue() { rear=front1=99; } //入队 template <class T> void seqqueue<T>::push(T x) { if((rear+1)%100==front1) { cout<<"队满"<<endl; } rear=(rear+1)%100; data[rear]=x; } //出队 template <class T> T seqqueue<T>::pop() { if(rear==front1) { cout<<"队空"<<endl; return 0; } front1=(front1+1)%100; return data[front1]; } //取队首 template <class T> T seqqueue<T>::getpop() { if(rear==front1) { cout<<"队空"<<endl; return 0; } return data[(front1+1)%100]; } //判断队空是否为空 template <class T> int seqqueue<T>::Empty() { if(rear==front1)return 1; else return 0; } int main() { seqqueue<int> h; int x; cin>>x; while(x!=0) { h.push(x); cin>>x; } cout<<h.pop(); cout<<h.getpop(); cout<<h.Empty(); return 0; }链队的基本操作
#include <iostream> using namespace std; template <class T> struct node { T data; node<T> *next; }; template <class T> class linkqueue{ public: linkqueue(); ~linkqueue(); void push(T x); T pop(); T getpop(); int Empty(); private: node<T> *front1; node<T> *rear; }; //构造 template <class T> linkqueue<T>::linkqueue() { front1=new node<T>; rear=front1; front1->next=NULL; } //入队 template <class T> void linkqueue<T>::push(T x) { node<T> *s; s=new node<T>; s->data=x; s->next=NULL; rear->next=s; rear=s; } //析构 template <class T> linkqueue<T>::~linkqueue() { node<T> *p=front1; while(front1!=NULL) { front1=front1->next; delete p; p=front1; } } //出队 template <class T> T linkqueue<T>::pop() { node<T> *p=front1->next; if(p!=NULL) { T x; x=p->data; front1->next=p->next; if(p->next==NULL) rear=front1; delete p; return x; } else { cout<<"p"<<endl; return 0; } } //取队首 template <class T> T linkqueue<T>::getpop() { if(front1->next!=NULL) return front1->next->data; else { cout<<"w"<<endl; return 0; } } //判队空 template <class T> int linkqueue<T>::Empty() { if(rear==front1) return 1; else return 0; } int main() { linkqueue<int> h; int x; cin>>x; while(x!=0) { h.push(x); cin>>x; } while(h.Empty()!=1) cout<<h.pop()<<endl; cout<<h.pop()<<endl; cout<<h.pop()<<endl; cout<<h.pop()<<endl; cout<<h.pop()<<endl; cout<<h.getpop()<<endl; return 0; }