溫馨提示×

溫馨提示×

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

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

C++中Queue隊(duì)列類模版的示例分析

發(fā)布時(shí)間:2022-02-28 09:29:36 來源:億速云 閱讀:140 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹C++中Queue隊(duì)列類模版的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

1.隊(duì)列的介紹

隊(duì)列的定義

  • 隊(duì)列(Queue)是一種線性存儲(chǔ)結(jié)構(gòu)。它有以下幾個(gè)特點(diǎn):

  • 按照"先進(jìn)先出(FIFO, First-In-First-Out)"方式進(jìn)出隊(duì)列。

  • 隊(duì)列只允許在"隊(duì)首"進(jìn)行取出操作(出隊(duì)列),在"隊(duì)尾"進(jìn)行插入操作(入隊(duì)列 )

隊(duì)列實(shí)現(xiàn)的方式有兩種

  • 基于動(dòng)態(tài)數(shù)組實(shí)現(xiàn)

  • 基于鏈表形式實(shí)現(xiàn)

隊(duì)列需要實(shí)現(xiàn)的函數(shù)

  • T dequeue() : 出隊(duì)列,并返回取出的元素

  • void enqueue(const T &t) : 入隊(duì)列

  • T &head() : 獲取隊(duì)首數(shù)據(jù),但是不會(huì)被取出

  • const T &head() const : 獲取const類型隊(duì)首數(shù)據(jù)

  • int length() const: 獲取數(shù)量(父類已經(jīng)實(shí)現(xiàn))

  • void clear(): 清空隊(duì)列(父類已經(jīng)實(shí)現(xiàn))

2.代碼實(shí)現(xiàn)

本章,我們實(shí)現(xiàn)的隊(duì)列基于鏈表形式實(shí)現(xiàn),它的父類是我們之前實(shí)現(xiàn)的LinkedList類:

C++ 雙向循環(huán)鏈表類模版實(shí)例詳解

所以Queue.h代碼如下:

#ifndef QUEUE_H
#define QUEUE_H
#include "throw.h"
// throw.h里面定義了一個(gè)ThrowException拋異常的宏,如下所示:
//#include <iostream>
//using namespace std;
//#define ThrowException(errMsg)  {cout<<__FILE__<<" LINE"<<__LINE__<<": "<<errMsg<<endl; (throw errMsg);}
#include "LinkedList.h"
template < typename T>
class Queue : public LinkedList<T>
{
public:
    inline void enqueue(const T &t) { LinkedList<T>::append(t); }
    inline T dequeue()
    {
        if(LinkedList<T>::isEmpty()) {        // 如果棧為空,則拋異常
            ThrowException("Stack is empty ...");
        }
        T t = LinkedList<T>::get(0);
        LinkedList<T>::remove(0);
        return t;
    }
    inline T &head()
    {
        if(LinkedList<T>::isEmpty()) {        // 如果棧為空,則拋異常
            ThrowException("Stack is empty ...");
        }
        return LinkedList<T>::get(0);
    }
    inline const T &head() const
    {
        if(LinkedList<T>::isEmpty()) {        // 如果棧為空,則拋異常
            ThrowException("Stack is empty ...");
        }
        return LinkedList<T>::get(0);
    }
};
#endif // QUEUE_H

3.測試運(yùn)行

int main(int argc, char *argv[])
{
    Queue<int> queue;
    cout<<"******* current length:"<<queue.length()<<endl;
    for(int i = 0; i < 5; i++) {
        cout<<"queue.enqueue:"<<i<<endl;
        queue.enqueue(i);
    }
    cout<<"******* current length:"<<queue.length()<<endl;
    while(!queue.isEmpty()) {
        cout<<"queue.dequeue:"<<queue.dequeue()<<endl;
    }
    return 0;
}

運(yùn)行打印:

C++中Queue隊(duì)列類模版的示例分析

以上是“C++中Queue隊(duì)列類模版的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

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

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

AI