剑指offer 面试题7:用两个栈实现队列 题解
2016-04-21 22:52
441 查看
用两个栈实现队列
提交网址: http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=11158
参与人数:6484 时间限制:1秒 空间限制:32768K
本题知识点:栈 队列
用两个栈实现一个队列的功能?请给出算法和思路!
<分析>:
入队:将元素进栈A
出队:判断栈B是否为空,如果为空,则将栈A中的每个元素pop,并push进栈B,取出栈B的顶端值并将其返回,如果不为空,栈B直接出栈。
同理:
用两个队列实现一个栈的功能?
<分析>:
入栈:将元素进队列A
出栈:判断队列A中元素的个数是否为1,如果等于1,则出队列;否则将队列A中的元素,依次出队列并放入队列B,直到队列A中的元素只留下一个,然后队列A出队列,再把队列B中的元素出队列依次放入队列A中。
AC代码:
另外,有博友用template实现了相关功能: http://blog.csdn.net/xiaofei2010/article/details/8922497
提交网址: http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=11158
参与人数:6484 时间限制:1秒 空间限制:32768K
本题知识点:栈 队列
用两个栈实现一个队列的功能?请给出算法和思路!
<分析>:
入队:将元素进栈A
出队:判断栈B是否为空,如果为空,则将栈A中的每个元素pop,并push进栈B,取出栈B的顶端值并将其返回,如果不为空,栈B直接出栈。
同理:
用两个队列实现一个栈的功能?
<分析>:
入栈:将元素进队列A
出栈:判断队列A中元素的个数是否为1,如果等于1,则出队列;否则将队列A中的元素,依次出队列并放入队列B,直到队列A中的元素只留下一个,然后队列A出队列,再把队列B中的元素出队列依次放入队列A中。
AC代码:
#include<iostream> #include<stack> #include<ctime> using namespace std; class Solution { private: stack<int> stack1; stack<int> stack2; public: void push(int node) { stack1.push(node); } int pop() { int tempVal; if(stack2.empty()){ while(!stack1.empty()){ tempVal=stack1.top(); stack2.push(tempVal); stack1.pop(); } } tempVal=stack2.top(); stack2.pop(); return tempVal; } }; // 以下为测试部分,加入了随机数 /* int main() { Solution sol; srand((unsigned)time(NULL)); rand(); double feed=((double) rand()/(RAND_MAX)) + 1; // 产生真正的随机数 for(int idx=1;idx<=5;idx++) { sol.push(3.24*idx*feed); } cout<<sol.pop()<<endl; cout<<sol.pop()<<endl; cout<<sol.pop()<<endl; cout<<sol.pop()<<endl; cout<<sol.pop()<<endl; // 由于新的队列中没有top()函数,但pop()函数有返回值,故可以如此操作 return 0; } */
另外,有博友用template实现了相关功能: http://blog.csdn.net/xiaofei2010/article/details/8922497
相关文章推荐
- 微软面试100题-61(找出数组中两个只出现一次的数字)
- Java多线程面试问题
- 清除行列之程序员面试经典
- 像素翻转之程序员面试经典
- 基本字符串压缩之程序员面试经典
- 程序员修炼之道读后感
- lintcode删除排序数组中的重复数字 II
- lintcode之数组划分
- 剑指offer之面试题14:调整数组顺序使奇数位于偶数前面
- 面试真题——匿名内部类
- 微软面试100题-60
- 微软面试100题-58从尾到头输出链表
- 微软面试100题-57 (用俩个栈实现队列)
- 腾讯测试实习生面试心得
- 面试问题
- 霍兰德- 职业兴趣测评
- 微软面试100题 - 56LCS
- 矩阵--原地转置--面试题
- 剑指offer之面试题13:在O(1)时间删除链表节点
- 二叉树的简单实现及其部分面试题