基于链表的双端队列的类模板的C++实现
来源:互联网 发布:js获取当前数组下标 编辑:程序博客网 时间:2024/05/16 12:01
/*用链表实现双端队列(储存整型)该队列有以下几个功能1.Createdeque输入n个元素来初始化队列2.cleardeque清空整个队列3.f_inde(T e)在队首插入元素e4.f_outde()队首元素出队5.l_inde(T e)在队尾插入元素e6.l_outde队尾元素出队7.empty检测队列是否为空8.length输出并返回队列长度9.display打印从队首到队尾的每一元素该队列有以下成员:1.fp队首指针2.lp队尾指针3.len队列长度by chczy2017/10/16 21:34*/#include<iostream>#include<algorithm>#include<new>using namespace std;template<class T>struct node {node* nx;node* pr;T data;};template<class T>class linkdeque {public:linkdeque();//构造空队列~linkdeque() { cout << "destroy the deque!" << endl; };node<T>* Createdeque(int n);//构造长度为n的队列void cleardeque();//清空队列node<T>* f_inde(T e);//在队首插入元素enode<T>* f_outde();//队首元素出队node<T>* l_inde(T e);//在队尾插入元素enode<T>* l_outde();//队尾元素出队bool empty();//检测队列是否为空int length();//返回队列长度void display();//遍历并打印队列元素private:node<T>* fp;//front pointernode<T>* lp;//rare pointerint len;};template<class T>linkdeque<T>::linkdeque(){fp = NULL;lp = NULL;len = 0;}template<class T>node<T>* linkdeque<T>::Createdeque(int n){len = n;node<T> *L = new node<T>;L->nx = NULL;L->pr = NULL;node<T> *h = new node<T>;cin >> h->data;L->nx = h;h->pr = L;h->nx = NULL;fp = h;int i = n-1;n -= 1;node<T> *prev;prev = h;while (n--){node<T> *p = new node<T>;cin >> p->data;prev->nx = p;p->pr = prev;p->nx = NULL;prev = p;if (n == 0)lp = p;}return fp;}template<class T>void linkdeque<T>::cleardeque(){while (!empty()) l_outde();}template<class T>node<T>* linkdeque<T>::f_inde(T e){node<T>* p=new node<T>;p->data = e;p->nx = fp;fp->pr = p;p->pr = NULL;fp = p;++len;return fp;}template<class T>node<T>* linkdeque<T>::f_outde(){node<T> *p = fp;node<T> *s = p->nx;s->pr = NULL;fp = s;delete p;--len;return fp;}template<class T>node<T>* linkdeque<T>::l_inde(T e){node<T>* p = new node<T>;p->data = e;p->pr = lp;lp->nx = p;p->nx = NULL;lp = p;++len;return lp;}template<class T>node<T>* linkdeque<T>::l_outde(){node<T> *p=lp;node<T> *s = p->pr;s->nx = NULL;lp = s;delete p;--len;return p;}template<class T>bool linkdeque<T>::empty(){if (len == 0)return 1;elsereturn 0;}template<class T>int linkdeque<T>::length()//打印并返回队列的长度{cout << "队列的长度是:" << endl;cout << len << endl;return len;}template<class T>void linkdeque<T>::display(){if (len == 0){cout << "no elem!" << endl;return;}int i = 0;node<T> *p = fp;cout << "队列长为" << len << endl;cout << "队列中的元素为: ";while (i != len){cout << p->data << " ";p = p->nx;++i;}cout << endl;}
阅读全文
1 0
- 基于链表的双端队列的类模板的C++实现
- 基于pthread的C++阻塞队列模板类的实现
- 队列类的模板实现
- 链队列的模板类实现
- 基于数组的队列实现(C语言)
- C语言基于链表的队列
- 基于链表的队列实现
- 基于链表的队列实现
- 基于数组的循环队列(C++模板实现)
- 自己写的基于链表的并发安全队列模板类concurrent_queue
- c++队列类模板的实现
- c++模板实现的队列
- 队列的C++模板实现
- 数据结构——基于数组的优先级队列模板类实现
- C++:队列的类实现
- 数据结构-队列:循环队列与链队列的C++模板类实现
- 队列的类模板
- [数据结构]队列之顺序队列的类模板实现
- 新思路解决问题
- (学习java)带有头结点的单向循环链表
- Django request.GET 编码错误解决
- Linux进程的实际用户ID和有效用户ID
- NSPopover
- 基于链表的双端队列的类模板的C++实现
- 模板:费用流
- 【SSH】Hibernate学习(三)一对多、多对一、多对多
- Android广播工作过程分析
- LeetCode91 Decode Ways
- switch语句
- hadoop之 Hadoop1.x和Hadoop2.x构成对比
- 10.15作业
- Web Service (010---webservice拦截器)