【面试题】剑指offer07--两个栈实现一个队列
来源:互联网 发布:cmd删除windows.old 编辑:程序博客网 时间:2024/06/05 20:13
我们都知道,栈的顺序是现金后出,而队列的顺序是后进先出,用两个栈实现一个队列,算法的思路如下:
现有两个队列q1与q2,入栈:如果q1与q2都为空,那么我们选择q1入栈也就是入队列,比如q1入栈 1 2 3 4 ;现在要出栈,后进先出那么4要出栈。但是q1是一个
队列,先进先出,那么 1 2 3出队列 q2 1 2 3 入队列,q1中此时剩余4,把4出对列达到出栈的效果。 这个时候如果我们又加入一个元素5,那么我们应该把5放到
q1还是q2,因为现在q2中有 1 2 3,把5放到q1不方便统计,所以要把5放入到q2;如果5放到了q1,等下编写出栈的代码很麻烦,如果放到q2我们只需要分类:q2
是不是为空,为空的为一种情况,不为空的为一种情况:
所以最后:
如果q1与q2都为空,那么往q1中插入元素
如果q1不为空,那么往q1中插入元素
如果q2不为空,那么往q1中插入元素
代码实现:
#include<iostream>using namespace std;#include<assert.h>#include<stack>template<typename T>class Queue{public:void Push(const T& x){sin.push(x);}void Pop(){assert(!sin.empty() || sout.empty());if (sout.empty())//如果出栈的数字为空{while (!sin.empty())//当入栈的数字不为空的时候{sout.push(sin.top());//入栈里面的最上面数字拿出来放到出栈里面sin.pop();//入栈最上面的数字pop掉}}sout.pop();//当出栈的数字不为空时,将出栈里面的数字进行pop}const T& Front(){assert(!sin.empty() || !sout.empty());if (sout.empty()){while (!sin.empty()){sout.push(sin.top());sin.pop();}}return sout.top();}protected:stack<T> sin;//定义入栈stack<T> sout;//定义出栈};int main(){system("pause");return 0;}
阅读全文
0 0
- 【面试题】剑指offer07--两个栈实现一个队列
- 剑指offer07题两个栈实现一个队列(c语言)
- 剑指offer07:用两个栈实现队列
- 面试题-----两个栈实现一个队列
- 《剑指Offer》面试题:用两个队列实现一个栈
- 【面试题】剑指Offer-7-两个栈实现一个队列
- 栈&队列面试题之两个队列实现一个栈
- 面试题7两个栈实现一个队列和两个队列实现一个栈
- 面试题(两个栈实现一个队列和两个队列实现一个栈)
- 【数据结构】栈面试题--两个栈实现一个队列
- 【数据结构】栈面试题--两个队列实现一个栈
- 面试题--用两个栈实现一个队列
- 经典面试题一:用两个栈实现一个队列
- 面试题 用两个栈实现一个队列
- 面试题8:用两个栈实现一个队列
- 面试题:用两个栈实现一个队列
- 面试题:用两个队列实现一个栈
- C++面试题:两个队列实现一个栈
- servlet&mvc&反射&jsp&jstl
- [主席树 Hash] Codechef JUNE17 #CLONEME Cloning
- CPictureEx和CPictureExWnd类,将GIF动画添加到MFC和ATL项目中
- QtIFW:制作程序安装包
- c++ builder 中的 XMLDocument 类详解(2)
- 【面试题】剑指offer07--两个栈实现一个队列
- 近期个人总结
- haha
- bzoj 2527 [Poi2011]Meteors
- [ BZOJ3572 ] [ Hnoi2014 ] [ 虚树 ] [ 树形DP ] 世界树
- 总分
- c++ builder 中的 XMLDocument 类详解(3)
- hdoj1059 Dividing (水题)
- dfs 写一遍