使用两个栈实现一个队列+使用两个队列实现一个栈
来源:互联网 发布:ug编程二次开粗技巧 编辑:程序博客网 时间:2024/05/31 06:22
栈的特点是先进后出
队列的特点是先进先出
用两个栈实现一个队列,必须保证它先进先出
入栈和如队列没什么区别,区别就在出栈和出队列
用两个栈实现一个队列,入队列时可以将全部数据压入空栈s1,然后将栈s1的全部元素压入栈s2,此时s2的栈顶元素要出队列的元素了。
#include<stack>template<class T>class StackQueue{public: StackQueue() {} void Push(T data) { s1.push(data); } void Pop() { if(s1.empty()&&s2.empty()) return ; else if(!s1.empty()) //s1不空 { s1tos2(); s2.pop(); } else // { s2.pop(); } }private: void s1tos2() { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } }private: stack<T> s1; stack<T> s2;};
用两个队列实现栈
入栈和入队列没啥区别,直接压入,
出栈必须用队列实现栈的先进后出。
我们可以将压入队列q1的数据以出队列的顺序再压入另一个空的队列q2中,直到q1中只有一个元素,此时q1中的元素就是要出栈的元素了,然后q1.pop();这里空队列不一定就是q2,每一次出栈都会发生变化,这里只是为了说的方便一点。
#include<queue>template<class T>class QueueSatck{public: QueueSatck() {} void Push(T data) { if(!q1.empty()) { q1.push(data); } else { q2.push(data); } } void pop() { if(!q1.empty()) { while(q1.size()>1) { q2.push(q1.front()); q1.pop(); } q1.pop(); } else { while(q2.size()>1) { q1.push(q2.front()); q2.pop(); } q2.pop(); } }private: queue<T> q1; queue<T> q2;};
阅读全文
0 0
- 栈&队列--使用两个栈实现一个队列+使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 数据结构-使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- ~使用两个栈实现一个队列~
- ~使用两个队列实现一个栈~
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- tabControl添加Form作为tabPage的控件,切换时不显示form的问题
- 【Java 8】行为参数化
- HDU 1847 Good Luck in CET-4 Everybody!(SG)
- 要想富先练功,设计模式之六大原则
- 为什么要引入数据库缓存,如redis?
- 使用两个栈实现一个队列+使用两个队列实现一个栈
- Java集合小结
- 『毒舌电影社区』干掉烂片,让烂片无路可走!
- CodePush配置
- tbschedule与spring整合
- Test 6 for NOIP
- Android 九宫格加载动画
- EJB到底是什么?
- Cordova+Angularjs+Ionic混合开发入门篇(二)—— 创建ionic工程