千家信息网

C++怎么实现循环顺序队列

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要介绍"C++怎么实现循环顺序队列",在日常操作中,相信很多人在C++怎么实现循环顺序队列问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++怎么实现循环顺序
千家信息网最后更新 2024年11月18日C++怎么实现循环顺序队列

这篇文章主要介绍"C++怎么实现循环顺序队列",在日常操作中,相信很多人在C++怎么实现循环顺序队列问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++怎么实现循环顺序队列"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

  • 队列的操作特性:先进先出

  • 队列中元素具有相同类型

  • 相邻元素具有前驱和后继关系

  • 设置队头、队尾两个指针,以改进出队的时间性能

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

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

如何判断循环队列队空?

队空:front=rear

如何盘对循环队列堆满?

队满:front=rear

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

下面是实现代码:

文件CirQueue.h

#ifndef CirQueue_byNim#define CirQueue_byNim#includeusing namespace std;const int QueueSize=100;  //循环队列的最大存储空间 template 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

到此,关于"C++怎么实现循环顺序队列"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0