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