c++模板队列类

#include<iostream>
using namespace std;
template <class T>
class QueueNode{
public:
        QueueNode<T>*next;
   T data;//类型为T的数据域 
   QueueNode(T& x,QueueNode<T> *l=NULL){
            data=x;
            next=l;
        }
};
template <class T>
class Queue{
public:
   Queue(void){
    head=rear=NULL;
}
~Queue(void){
QueueNode<T>*p;
QueueNode<T>*r;
       p=head;
       while(p!=NULL) {
       r=p;
       p=p->next; 
       delete r;
       }
}
bool Insert(T&item);//队尾添加元素
bool Delete();//删除队首元素 
bool Front(T&item);//存队首元素值 
QueueNode<T> *get_head(){
return head;
   }
private:
QueueNode<T>*head,*rear;//队首队尾指针
};


template <class T>
bool Queue<T>::Insert(T&item){
if(head==NULL) {
rear=head=new QueueNode<T>(item);
return true;
}
else{
rear=rear->next=new QueueNode<T>(item);
return true;

}
template <class T>
bool Queue<T>::Delete(){
if(head==NULL){
return false;
}
else if(head->next==NULL){
QueueNode<T>*p;
p=head;
head=rear=NULL;
delete p;
return true;
}
else{
QueueNode<T>*p;
p=head;
head=head->next;
delete p;
return true;
}
}
template <class T>
bool Queue<T>::Front(T&item){
if(head==NULL){
return false;
}
else{
item=head->data;
return true;
}

template <class T> T printQueue(QueueNode<T>*Head){ //打印队内元素  
    if(Head==NULL) { 
        cout<<"队列为空!"<<endl;  
    }  
    else{
        QueueNode<T>*p; 
        p=Head; 
        while(p!=NULL) {
        cout<<p->data<<"  ";
        p=p->next;
}
cout<<endl;
    }
}  
int main(){
Queue<int>q;
bool flag;
int n=1,m,num;
QueueNode<int> *h_node;
while(n!=0) {
    cout<<"1代表压入栈顶元素,2代表弹出栈顶元素,3代表获得栈顶元素,0代表结束操作"<<endl;
cin>>n; 
    if(n==1){
    cout<<"请输入队尾元素"<<endl;
cin>>m; 
    flag=q.Insert(m);
cout<<"入队成功!"<<endl;
  cout<<"队内元素为"<<endl;
  h_node=q.get_head();
    printQueue(h_node); //打印栈内元素 

else if(n==2){
flag=q.Delete();//弹出栈顶元素
if(flag==true){
   cout<<"出队成功!"<<endl;
     cout<<"队内元素为"<<endl;
       h_node=q.get_head();
       printQueue(h_node); //打印栈内元素 
       }
       else{
        cout<<"队列为空!"<<endl; 


        else if(n==3) {
        flag=q.Front(num);//获得栈顶元素 
        if(flag==true){
        cout<<"队首元素为"<<num<<endl;
}
else{
        cout<<"队列为空!"<<endl; 
}
}
else{
   break;
}
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值