溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++如何實(shí)現(xiàn)循環(huán)順序隊(duì)列

發(fā)布時(shí)間:2021-07-10 10:22:24 來(lái)源:億速云 閱讀:123 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了C++如何實(shí)現(xiàn)循環(huán)順序隊(duì)列,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

數(shù)據(jù)結(jié)構(gòu)–用C++實(shí)現(xiàn)循環(huán)順序隊(duì)列

  • 隊(duì)列的操作特性:先進(jìn)先出

  • 隊(duì)列中元素具有相同類(lèi)型

  • 相鄰元素具有前驅(qū)和后繼關(guān)系

  • 設(shè)置隊(duì)頭、隊(duì)尾兩個(gè)指針,以改進(jìn)出隊(duì)的時(shí)間性能

約定:隊(duì)頭指針front指向隊(duì)頭元素的前一個(gè)位置,隊(duì)尾指針rear指向隊(duì)尾元素

為了解決假溢出,我們將存儲(chǔ)隊(duì)列的數(shù)組頭尾相接,從而產(chǎn)生了循環(huán)隊(duì)列。

如何判斷循環(huán)隊(duì)列隊(duì)空?

隊(duì)空:front=rear

如何盤(pán)對(duì)循環(huán)隊(duì)列堆滿(mǎn)?

隊(duì)滿(mǎn):front=rear

那么問(wèn)題就來(lái)了,隊(duì)空和隊(duì)滿(mǎn)的判斷條件相同,為了避免隊(duì)滿(mǎn)時(shí)產(chǎn)生隊(duì)空的判斷或者相反,我們需要修改隊(duì)滿(mǎn)條件使得隊(duì)空和堆滿(mǎn)的判定條件分開(kāi)。
方法:浪費(fèi)一個(gè)元素空間,隊(duì)滿(mǎn)時(shí)數(shù)組只有一個(gè)空閑單元。隊(duì)滿(mǎn)條件:(rear+1)%QueueSize==front

下面是實(shí)現(xiàn)代碼:

文件CirQueue.h

#ifndef CirQueue_byNim
#define CirQueue_byNim

#include<iostream>
using namespace std;

const int QueueSize=100;  //循環(huán)隊(duì)列的最大存儲(chǔ)空間 
template <class T>
class CirQueue
{
  private:
    T *data;  //存儲(chǔ)數(shù)據(jù)的數(shù)組 
    int front,rear; //隊(duì)頭隊(duì)尾指針 
  public:
    CirQueue()
    {
      data=new T[QueueSize];
      front=rear=0;
    }
    ~CirQueue()
    {
      delete []data;
      front=rear=0;
    }
    void EnQueue(T e)
    {
      if((rear+1)%QueueSize==front)  //隊(duì)滿(mǎn)條件 
        throw "上溢";
      rear=(rear+1)%QueueSize;
      data[rear]=e;
    }
    T DeQueue()
    {
      if(rear==front)//隊(duì)空條件 
        throw "下溢";
      front=(front+1)%QueueSize;
      return data[front];
    }
    T GetQueue()
    {
      if(rear==front)//隊(duì)空條件 
        throw "下溢";
      return data[(front+1)%QueueSize];
    }
    bool empty()
    {
      if(front==rear) //隊(duì)空條件:front==rear 
        return true;
      return false;
    }
};

#endif

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C++如何實(shí)現(xiàn)循環(huán)順序隊(duì)列”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI