数据结构c++实现----双端队列
2013-10-26 17:23
351 查看
双端队列,首尾都能进行入队和出队,所以我为了方便没有设置头结点,也不知道不设头节点是对是错!!
代码如下:
头文件head.h
//deque.cpp
//main.cpp 测试
代码如下:
头文件head.h
/*************************************** *这个node节点可以反复使用 *本来,我想用继承,但无法实现。又在类里定义node,但操作麻烦,前后指针操作都要使用函数 *最后确定用 友员 *修改时间: 2013 09 25 23:50 ****************************************/ #ifndef HEAD #define HEAD #include<iostream> using namespace std; //template<typename T> class DoubleList; template<typename T> class Deque; template <typename T> class LinkNode { public: friend class Deque<T>; LinkNode(); LinkNode( const T &elem); //~LinkNode();用不到 private: T data; LinkNode *pPre; LinkNode *pNext; }; template <typename T> LinkNode<T>::LinkNode():pPre(NULL),pNext(NULL) { //用于初始化头结点,data用不到。 } template <typename T> LinkNode<T>::LinkNode( const T &elem):data(elem),pPre(NULL),pNext(NULL) { //初始化其余元素 } #endif
//deque.cpp
/**************************************************** * 双端队列 * 为了方便存取没有设置头结点 * 因为没有头结点,所以要特别注意判断为空,插入第一个元素,删除最后一个元素时,容易发生访问超界现象 * * * 完成日期:2013-10-26 17:17 *****************************************************/ #include"head.h" template<typename T> class Deque{ public: Deque(); ~Deque(); bool isEmpty(); void clear(); //log = 1 表示从队首插入 //log = 2 表示从队尾插入 void EnDeque( T elem ,int log ); //log = 1 表示从队首出队 //log = 2 表示从队尾出队 T DeDeque( int log ); private: LinkNode<T> *front; LinkNode<T> *rear; }; template<typename T> Deque<T>::Deque(){ front = NULL; rear = front; } template<typename T> Deque<T>::~Deque(){ if( !isEmpty() ){ clear(); } } template<typename T> bool Deque<T>::isEmpty(){ if( rear == NULL || front == NULL ){ return true; }else{ return false; } } template<typename T> void Deque<T>::clear(){ LinkNode<T> *p; if( front != NULL ){ p = front; front = front->pNext; delete p; } } template<typename T> void Deque<T>::EnDeque( T elem ,int log){ LinkNode<T> *p; p = new LinkNode<T>; p->data = elem; if( front == NULL ){ //防止内存读写超界 front = p; rear = p; }else{ if( log == 1 ){ //if( front != NULL ){ front->pPre = p; p->pNext = front; front = p; //} }else{ rear->pNext = p; p->pPre = rear; rear = p; } } } template<typename T> T Deque<T>::DeDeque(int log){ LinkNode<T> *p; T q; if( log == 1 ){ p = front; front = front->pNext; if(front != NULL){ //防止内存访问超界 front->pPre = NULL; } q = p->data; delete p; return q; }else{ p = rear; rear = rear->pPre; if(rear != NULL){ //防止内存访问超界 rear->pNext = NULL; } q = p->data; delete p; return q; } }
//main.cpp 测试
#include"head.h" #include"Deque.cpp" int main() { Deque<int> que; if( que.isEmpty()){ cout<<"isempty"<<endl; } que.EnDeque(11,1); que.EnDeque(22,1); que.EnDeque(33,1); que.EnDeque(44,1); que.EnDeque(11,2); que.EnDeque(22,2); que.EnDeque(33,2); que.EnDeque(44,2); while( !que.isEmpty()){ cout<<que.DeDeque(1)<<endl; } que.EnDeque(11,2); que.EnDeque(22,2); que.EnDeque(33,2); que.EnDeque(44,2); while( !que.isEmpty()){ cout<<que.DeDeque(2)<<endl; } }
相关文章推荐
- 数据结构(6) 顺序队列 c++ 模板实现
- 数据结构队列C++代码实现
- 《C++实现数据结构》:优先权队列
- 简单数据结构之队列(C++模板库实现)
- 利用数组实现双端队列(C++)
- 数据结构——顺序队列的C++实现
- 【c++版数据结构】链队列的实现
- 【数据结构】实现大小堆也叫二叉堆(类似c++中的优先队列)
- 数据结构(7) 链队列 c++ 模板实现
- 数据结构-队列:循环队列与链队列的C++模板类实现
- 数据结构之C++实现顺序队列(SeqQueue)(无主函数)
- 算法与数据结构基础6:C++队列的简单实现
- c++数据结构 链队列的实现
- c++实现数据结构八 链式队列
- 数据结构学习之循环队列c++实现
- c++ 数据结构 双端(循环)队列
- 数据结构学习之链队列c++实现
- 数据结构学习之队列的链式存储的C++实现
- 数据结构之C++实现链式队列(LinkQueue)(无主函数)
- [数据结构]C++队列实现和队列简介