数据结构之通过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; }
最基本的就是最精华的,当基础知识已经熟烂于心,不需要思考就可以敲出来时,我想要扩展其他的东西,就简单多了!!!
PS:本人承接各种数据结构课设,想做数据结构课设的同学,可以联系我!(不过我不会告诉你我联系方式的!)