#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){ //设置next
next = n;
}
T getData() const { //返回数值部分
return data;
}
QueueNode<T> * getNext() const{ //返回next
return 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(); //打印队列
}
队列(链式存储)C++模板实现
最新推荐文章于 2021-10-06 16:27:15 发布