数据结构——Stack和Queue的互相实现
2015-06-24 22:55
531 查看
这里所说的队列和栈都是STL中的queue/stack。具体操作有如下:
stack s;//头文件stack.h
s.empty(); s.size();
s.pop(); //delete
s.push(1); int a=s.top();
queue s;//头文件queue.h
s.empty(); s.size();
s.front(); s.back();
s.pop();//delete
s.push(1);
priority_queue s;/头文件queue.h,优先队列,默认使用元素<操作符确定优先关系,优先级最高的在队列头部/
在queue 基础上多一个操作 s.top(),而且s.push(1)操作位置不同。
直接上程序,思路不解释:
stack s;//头文件stack.h
s.empty(); s.size();
s.pop(); //delete
s.push(1); int a=s.top();
queue s;//头文件queue.h
s.empty(); s.size();
s.front(); s.back();
s.pop();//delete
s.push(1);
priority_queue s;/头文件queue.h,优先队列,默认使用元素<操作符确定优先关系,优先级最高的在队列头部/
在queue 基础上多一个操作 s.top(),而且s.push(1)操作位置不同。
直接上程序,思路不解释:
template<typename T>//两个stack实现Queue class Queue{ private: stack<T> s1,s2; T back_elem; public: bool empty()const{return (s2.empty()&&s1.empty()) ;} int size()const{ return s2.size()+s1.size(); } void push(T elem) { s1.push(elem); back_elem=elem; } void pop(){ if(!s2.empty()) s2.pop(); else if(!s1.empty()) { while(!s1.empty()){ s2.push(s1.top);s1.pop();} s2.pop(); } else cout<<"error pop,Queue is empty!"<<endl; } T front(){ if(!s2.empty()) return s2.top(); else if(!s1.empty()){ while(!s1.empty()){ s2.push(s1.top());s1.pop();} return s2.top(); } else cout<<"error front,Queue is empty!"<<endl; } T back(){ if(!empty()) return back_elem; else cout<<"error back,Queue is empty!"<<endl; } }; template<typename T>//两个Queue实现stack class Stack{ private://每次保证队列一个为空一个非空 queue<T> q1,q2; bool f1,f2;//标记那个队列非空。 public: Stack(){f1=true;f2=false;}//f1,f2必定一个为真一个为假 bool empty()const{return q1.empty()&&f1 || q2.empty()&& f2;} int size()const{ if(!q1.empty()&&f1) return q1.size(); if(!q2.empty()&&f2) return q2.size(); return 0; } void pop(){ if(!q1.empty()&&f1){ while(q1.size()!=1){ q2.push(q1.front()); q1.pop(); } q1.pop(); f1=false;f2=true; return; } if(!q2.empty() &&f2){ while(q2.size()!=1){ q1.push(q2.front()); q2.pop(); } q2.pop();f2=false;f1=true; return; } std::cout<<"pop error,Stack is empty!"<<endl; } void push( T elem){ if(f1) q1.push(elem); else q2.push(elem); } T top(){ if(!q1.empty() && f1) return q1.back(); if(!q2.empty() &&f2 ) return q2.back(); std::cout<<"top error,Stack is empty!"<<endl; return 0; } };
相关文章推荐
- Python数据结构:序列——字符串
- 《数据结构与算法分析c++描述》读书笔记二——二叉树
- POJ 1655 Balancing Act (树的重心)
- 用数组实现js中的堆栈 或者队列数据结构
- 【数据结构】队列
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 【数据结构】栈
- 分析数据结构IO_CACHE及相关处理函数
- 【数据结构】线性表之链式存储结构
- 【数据结构】线性表之顺序存储结构
- C# 数据结构 栈 Stack
- 数据结构 - 图的数组存储
- 数据结构-堆
- 数据结构和算法经典100题-第19题
- 数据结构与算法(javascript描述)——2. 数组
- 平衡二叉树之一(基本性质、查询、添加)
- BZOJ3209 花神的嘲讽计划I
- 数据结构--图的定义和存储结构
- 2-06. 数列求和
- 【数据结构】直接插入排序_哨兵位