数据结构之通过C++来实现一个队列
生活随笔
收集整理的這篇文章主要介紹了
数据结构之通过C++来实现一个队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
閑來無事,隨手寫一個隊列出來開心開心...我個人覺得這東西實在是挺簡單的,也就沒寫什么注釋,遇到問題的同學,請在評論框,留下你的疑問.
/* *文件說明:Queue相關函數聲明及實現(代碼量較少,就不分文件實現了) *作者:高小調 *日期:2016-12-07 *集成開發環境:Microsoft Visual Studio 2010 */ #ifndef __QUEUE_H__ #define __QUEUE_H__ template<typename T> struct _QueueNode{_QueueNode *_pPrev;_QueueNode *_pNext;T _Data;//構造函數_QueueNode():_Data(T()){} _QueueNode(const T & d):_Data(d){} }; template<typename T> class Queue{typedef _QueueNode<T> Node; public://構造函數Queue():_pHead(NULL),_pTail(NULL),_uSize(0){}//拷貝構造Queue(const Queue &q):_pHead(NULL),_pTail(NULL),_uSize(0){//被拷貝對象不是空隊列if(NULL != q._pHead){Node *pCur = q._pHead;while(pCur){PushBack(pCur->_Data);pCur = pCur->_pNext;}}}//賦值運算符重載Queue &operator=(const Queue& q){Queue tmp(q);swap(_pHead,tmp._pHead);swap(_pTail,tmp._pTail);swap(_uSize,tmp._uSize);}//析構函數~Queue(){if(NULL!=_pHead){Node *pCur = _pHead;while(pCur){delete pCur->_pPrev;pCur = pCur->_pNext;}_pHead = NULL;_pTail = NULL;_uSize = NULL;}} public://入隊void PushBack(const T & e){//當前為空隊列if(NULL==_pHead){_pHead = _pTail = _BuyNode(e);}else{Node *NewNode = _BuyNode(e);NewNode->_pPrev = _pTail;_pTail->_pNext = NewNode;_pTail = NewNode;}++_uSize;}//出隊void PopFront(){//當前隊列非空if(!Empty()){Node * DelNode = _pHead;Node * NewHead = _pHead->_pNext;if(NULL!=NewHead){NewHead->_pPrev = NULL;}_pHead = NewHead;delete DelNode;--_uSize;}}//判空bool Empty(){return _uSize==0;}//獲取隊首元素T &Front(){assert(_pHead);return _pHead->_Data;}const T &Front()const{assert(_pHead);return _pHead->_Data;}//獲取隊尾元素T &Back(){assert(_pTail);return _pTail->_Data;}const T &Back()const{assert(_pTail);return _pTail->_Data;}//獲取當前隊列元素個數size_t Size(){return _uSize;} private:Node *_BuyNode(const T &e){return new Node(e);} private:Node *_pHead;Node *_pTail;size_t _uSize; }; #endif/* *文件說明:測試Queue類的基本接口 *作者:高小調 *日期:2016-12-07 *集成開發環境:Microsoft Visual Studio 2010 */ #include<assert.h> #include<iostream> #include"Queue.h" using namespace std; void QueueTest(){Queue<int> q1;q1.PopFront();q1.PushBack(1);cout<<"隊首:"<<q1.Front()<<" 隊尾:"<<q1.Back()<<endl;q1.PushBack(2);cout<<"隊首:"<<q1.Front()<<" 隊尾:"<<q1.Back()<<endl;q1.PushBack(3);cout<<"隊首:"<<q1.Front()<<" 隊尾:"<<q1.Back()<<endl;q1.PopFront();cout<<"隊首:"<<q1.Front()<<" 隊尾:"<<q1.Back()<<endl;q1.Front() = 666666;cout<<"隊首:"<<q1.Front()<<" 隊尾:"<<q1.Back()<<endl;q1.Back() = 999999;cout<<"隊首:"<<q1.Front()<<" 隊尾:"<<q1.Back()<<endl; } int main(){QueueTest();return 0; }
最基本的就是最精華的,當基礎知識已經熟爛于心,不需要思考就可以敲出來時,我想要擴展其他的東西,就簡單多了!!!
轉載于:https://www.cnblogs.com/shujujiegou/p/6142715.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的数据结构之通过C++来实现一个队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4-1:C/C++内存管理
- 下一篇: 6-6-3:STL之map和set——m