您好,登錄后才能下訂單哦!
這篇文章主要介紹C++中Queue隊列類模版的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
隊列的定義
隊列(Queue)是一種線性存儲結構。它有以下幾個特點:
按照"先進先出(FIFO, First-In-First-Out)"方式進出隊列。
隊列只允許在"隊首"進行取出操作(出隊列),在"隊尾"進行插入操作(入隊列 )
隊列實現的方式有兩種
基于動態數組實現
基于鏈表形式實現
隊列需要實現的函數
T dequeue() :
出隊列,并返回取出的元素
void enqueue(const T &t) :
入隊列
T &head() :
獲取隊首數據,但是不會被取出
const T &head() const :
獲取const類型隊首數據
int length() const:
獲取數量(父類已經實現)
void clear():
清空隊列(父類已經實現)
本章,我們實現的隊列基于鏈表形式實現,它的父類是我們之前實現的LinkedList類:
C++ 雙向循環鏈表類模版實例詳解
所以Queue.h代碼如下:
#ifndef QUEUE_H #define QUEUE_H #include "throw.h" // throw.h里面定義了一個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
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; }
運行打印:
以上是“C++中Queue隊列類模版的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。