队列(链式存储)C++模板实现

来源:互联网 发布:行政服务中心招聘网络 编辑:程序博客网 时间:2024/06/06 17:21
#include <iostream>using namespace std;//队列结点类template <typename T>class QueueNode{private:T data; //结点数值部分QueueNode<T> * next;  //指向下一结点public:QueueNode(T d=0 , QueueNode<T> *n=NULL){  //构造函数data= d;next=n;};void setData(T d){  //设置数值部分data = d;}void setNext(QueueNode<T> * n){  //设置nextnext = n;}T getData() const {  //返回数值部分return data;}QueueNode<T> * getNext() const{  //返回nextreturn next;}};//队列类template <typename T>class Queue{private:int num;  //队列结点个数QueueNode<T> *front,*rear; //front队首指针(出队的一端),rear队尾指针(入队的一端)。public:Queue(){  //队列类构造函数num=0;front=NULL;rear=NULL;}~Queue(){  //释放整个队列空间即释放整个链表while(front){QueueNode<T> * p = front;front = front->getNext();delete p;}}void In(T x);  //一个值为x的结点进队void Out();  //队首结点出队T getFront() const; //获得队首结点的值bool isEmpty() const;  //判断队列是否为空int getLength() const; //获得队列长度void printAll() const; //打印整个队列};//一个值为x的结点进队,实现部分template <typename T>void Queue<T>::In(T x){if(isEmpty())front=rear=new QueueNode<T>(x);else {QueueNode<T> *p= new QueueNode<T>(x);rear->setNext(p);rear = p;}num++;}//队首结点出队,实现部分template <typename T>void Queue<T>::Out(){QueueNode<T> *p=front;front = front->getNext();delete p;num--;} //获得队首结点的值,实现部分template <typename T>T Queue<T>::getFront() const {return front->getData();}//判断队列是否为空,实现部分template <typename T>bool Queue<T>::isEmpty() const {return num==0;}//获得队列长度,实现部分template <typename T>int Queue<T>::getLength() const {return num;}//打印整个队列,实现部分template <typename T>void Queue<T>::printAll() const{if(isEmpty())cout<<"队列为空"<<endl;else{QueueNode<T> *p =front;int i =1;while(p){cout<<"第"<<i<<"个结点:"<<p->getData()<<endl;p = p->getNext();i++;}}}void main(){Queue<int> a; //创建队列cout<<"队列初始长度:"<<a.getLength()<<endl<<endl;a.In(1);  //值为1的结点进队a.In(2);  //值为2的结点进队a.In(3);  //值为3的结点进队a.In(4);  //值为4的结点进队a.In(5);  //值为5的结点进队cout<<"队列长度:"<<a.getLength()<<endl;a.printAll();  //打印队列a.Out();  //队首结点出队a.Out();  //队首结点出队cout<<endl<<"队列长度:"<<a.getLength()<<endl;a.printAll(); //打印队列}

0 0
原创粉丝点击