首页 > 编程 > C++ > 正文

C++数据结构之实现循环顺序队列

2020-05-23 13:56:03
字体:
来源:转载
供稿:网友

数据结构–用C++实现循环顺序队列

  • 队列的操作特性:先进先出
  • 队列中元素具有相同类型
  • 相邻元素具有前驱和后继关系
  • 设置队头、队尾两个指针,以改进出队的时间性能

约定:队头指针front指向队头元素的前一个位置,队尾指针rear指向队尾元素

为了解决假溢出,我们将存储队列的数组头尾相接,从而产生了循环队列。

如何判断循环队列队空?

队空:front=rear

如何盘对循环队列堆满?

队满:front=rear

那么问题就来了,队空和队满的判断条件相同,为了避免队满时产生队空的判断或者相反,我们需要修改队满条件使得队空和堆满的判定条件分开。
方法:浪费一个元素空间,队满时数组只有一个空闲单元。队满条件:(rear+1)%QueueSize==front

下面是实现代码:

文件CirQueue.h

#ifndef CirQueue_byNim#define CirQueue_byNim#include<iostream>using namespace std;const int QueueSize=100;  //循环队列的最大存储空间 template <class T>class CirQueue{  private:    T *data;  //存储数据的数组     int front,rear; //队头队尾指针   public:    CirQueue()    {      data=new T[QueueSize];      front=rear=0;    }    ~CirQueue()    {      delete []data;      front=rear=0;    }    void EnQueue(T e)    {      if((rear+1)%QueueSize==front)  //队满条件         throw "上溢";      rear=(rear+1)%QueueSize;      data[rear]=e;    }    T DeQueue()    {      if(rear==front)//队空条件         throw "下溢";      front=(front+1)%QueueSize;      return data[front];    }    T GetQueue()    {      if(rear==front)//队空条件         throw "下溢";      return data[(front+1)%QueueSize];    }    bool empty()    {      if(front==rear) //队空条件:front==rear         return true;      return false;    }};#endif

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表