队列(链表实现)

链式队列在进队时无队满问题,但有队空问题。

队空条件为 front == NULL

 

目录

 队列抽象数据类型(模板)

建立链式队列(声明)

清空队列

进队

出队


 队列抽象数据类型(模板)

template <class E>
class Queue {
public:
     Queue() { };	      //构造函数
     ~Queue() { };	      //析构函数
     virtual bool EnQueue(E x) = 0;           //进队列
     virtual bool DeQueue(E& x) = 0;	      //出队列
     virtual bool getFront(E& x) = 0;	      //取队头  
     virtual bool IsEmpty() const = 0;	      //判队列空
     virtual bool IsFull() const = 0;	      //判队列满
};

建立链式队列(声明)

#include <iostream.h>
#include “Queue.h”
template <class E>
struct QueueNode {                   //队列结点类定义	
    E data;			          //队列结点数据
    QueueNode<E> *link;          //结点链指针
};  

template <class E>
class LinkedQueue {	
private: 
     QueueNode<E> *front, *rear;   //队头、队尾指针
public: 
    LinkedQueue() : rear(NULL), front(NULL) { }
    ~LinkedQueue();					
    bool EnQueue(E x);
    bool DeQueue(E& x);			
    bool GetFront(E& x);			
    void MakeEmpty();            //实现与~Queue()相同
    bool IsEmpty() const { return front == NULL; }
};

清空队列

template <class E>
LinkedQueue<E>::~LinkedQueue() {      //析构函数
    QueueNode<E> *p;
    while (front != NULL) {              //逐个结点释放
        p = front;  front = front->link;  delete p;
    }
};

进队

template <class E> 
bool LinkedQueue<E>::EnQueue(E x) {
//将新元素x插入到队列的队尾
if (front == NULL)  {            //创建第一个结点
       QueueNode<E> *p;
       p=new QueueNode;
       p->data=x;
	   front = p;
       rear = p;
       if (front == NULL)//判断分配失败的情况 
            return false; 
    }	
else {                                  //队列不空, 插入
       QueueNode<E> *p;
       p=new QueueNode;
       p->data=x;
       rear->link = p;
       if (rear->link == NULL) 
            return false; 
       rear = rear->link;
     }
  return true;
};

出队

template <class E>
//如果队列不空,将队头结点从链式队列中删去
bool LinkedQueue<E>::DeQueue(E& x) {//引用直接改x值
     if (IsEmpty() == true) 
             return false;        //判队空
     QueueNode<E> *p = front;		
     x = front->data; 
     front = front->link;   
     delete p;   
     return true;				
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值