[C++] 習(xí)題 2.15 實現(xiàn)簡單環(huán)形隊列

設(shè)計一個環(huán)形隊列,用front和rear分別作為隊頭和隊尾指針,另外用一個tag表示隊列是空 ( 0 ) 還是不空 ( 1 ),這樣就可以用front==rear作為隊滿的條件。要求設(shè)計隊列的相關(guān)基本運算算法。

前置技能

  • 環(huán)形隊列
    隊列中進出時需要大量前移后移操作,除了鏈式隊列,使用環(huán)形隊列挪動下標也是一個不錯的選擇。隊列的數(shù)據(jù)類型定義參考書第45頁。
環(huán)形隊列

具體實現(xiàn)

原理很簡單,實現(xiàn)的時候要注意判斷tag在數(shù)入隊、出隊時,是否要轉(zhuǎn)換真假值。另外清除隊列時只需要把頭尾相對,隊列標空。

#include<iostream>

template<class T>
class queue{
    private:
        int maxsize;
        int front;
        int rear;
        bool tag;
        T *data;
    public:
        queue(int size){
            maxsize = size;
            front = 0;
            rear = 0;
            tag = false;
            data = new T [size];
        }
        ~queue(){
            delete data;
        }
        void clear(){            //清除
            rear = front;
            tag = false;
        }
        bool enqueue (T tmp){    //入隊
            if(full()){
                return false;
            }
            else{
                if(empty()){
                    tag = true;
                }
                data[rear] = tmp;
                rear = (rear+1) % maxsize;
                return true;
            }
        }
        bool dequeue (T &tmp){   //出隊
            if(empty()){
                return false;
            }
            else{
                tmp = data[front];
                front = (front+1) % maxsize;
                if(front == rear){
                    tag = false;
                }
                return true;
            }
        }
        bool getfront (T &tmp){
            if(empty()){
                return false;
            }
            else {
                tmp = data[front];
                return true;
            }
        }
        bool empty(){
            if (rear == front && tag == false){
                return true;
            }
            else{
                return false;
            }
        }
        bool full(){
            if (rear == front && tag == true){
                return true;
            }
            else{
                return false;
            }
        }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容