题目
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
用栈来模拟队列。我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc,其中c位于栈顶,而stack2仍然为空。我们试着删除一个元素。按照队列先进先出的原则,我们应该先删除元素a。元素a存放在stack1中且不在栈顶,因此不能直接删除。注意到stack2还未使用,我们把stack1中的元素逐个弹出并压入stack2中,stack2中的元素是cba,栈顶元素是a,我们现在可以直接删除元素a了。
当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。如果stack2为空时,我们把stack1中的元素逐个弹出并压入stack2中。由于先进入队列的元素被压到stakc1的低端,经过弹出和压入之后就处于stack2的顶端了,可以直接弹出。
代码
#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <algorithm>
using namespace std;
class Solution{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.empty()){
if(stack1.empty()){
return -1;
}
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
int num = stack2.top();
stack2.pop();
return num;
}
private:
stack<int> stack1;
stack<int> stack2;
};
int main(){
Solution s;
s.push(1);
s.push(2);
s.push(3);
cout<<s.pop()<<endl;
cout<<s.pop()<<endl;
s.push(4);
s.push(5);
cout<<s.pop()<<endl;
s.push(6);
cout<<s.pop()<<endl;
cout<<s.pop()<<endl;
cout<<s.pop()<<endl;
cout<<s.pop()<<endl;
return 0;
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
title: 剑指Offer-用两个栈实现队列subtitle: 用两个栈实现队列categories: 剑指Offer用两个栈实现队列题目描述用两个栈来实现一
要求用两个栈{stack1,stack2}实现一个队列,也就是说我们需要使用栈的push和pop功能来构造队列的push和pop功能。 栈我们用列表表示,相应的功能使用append和pop函数实现。 队列的push功能: 使用stack1来存储元素,...
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 思路 根据栈的特性...
7. 用两个栈实现队列 8. 求旋转数组的最小数字 9. 斐波那契数列的第n项(青蛙跳台阶) 10. 二进制中1的个数 11. 数值的整数次方 12. 打印1到最大的n位数 13. O(1)时间删除链表节点 14. 使数组中的奇数位于偶数...
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104055970
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
public void push(int node) {//压栈之前先将栈里的元素全部pop出来并push到另一个栈//压入新元素//将之前pop出去的元素再压
剑指 Offer 41. 数据流中的中位数标签:设计、双指针、数据流、排序、堆(优先队列)难度:困难题目大意要求:设计一个支持一下两种操作的数组结构:void
剑指 Offer 41. 数据流中的中位数标签:设计、双指针、数据流、排序、堆(优先队列)难度:困难题目大意要求:设计一个支持一下两种操作的数组结构:void
看个例子:代码:public class Solution {public void push(int node) {思路二:每次从队列中取队头元素的时候,都是
用两个栈实现队列 栈与队列的操作 503. 下一个更大元素 II 单调栈 剑指Offer 18. 删除链表的节点 链表双指针 剑指Offer 22. 链表中倒数第k个节点 链表双指针 剑指Offer 24. 反转链表 链表指针 剑指Offer 54. 二叉...
面试题 5:用两个栈实现队列(考点: 栈和队列) 5 面试题 6:旋转数组的最小数字(考点:查找和排序) 6 面试题 7:斐波那契数列(考点: 递归和循环) 7 面试题 8:跳台阶(考点: 递归和循环) 7 面试题 9:变态跳台阶...
面试题7 用两个栈实现队列 2.4 算法和数据操作 面试题8 旋转数组的最小数字 面试题9 斐波那契数列 面试题10 二进制中1的个数 第3章 高质量代码 3.3 代码的完整性 面试题11 数值的整数次方 面试题12 打印1到最大的n...
9.1 用两个队列实现栈 2.4 算法和数据操作 10 斐波那契数列 11 旋转数组的最小数字 12 矩阵中的路径 13 机器人的运动范围 14 剪绳子 15 二进制中1的个数 第3章 高质量的代码 3.3 代码的完整性 16 数值的整数次方 17 ...
第七题 使用两个栈实现队列 测试7 第八题 寻求旋转带宽的最小数字 测试8 第九题 斐波那契数列的第n项(青蛙跳台阶) 测试9 第十题 二进制中1的个数 测试10 第十一题 数值的整数次方 测试11 第十二题 打印1到最大的n...
用两个栈实现队列 栈和队列 LeetCode 232 6 旋转数组的最小数字 查找和排序 LeetCode 153 7 斐波那契数列 递归和循环 LeetCode 509 8 跳台阶 递归和循环 LeetCode 70 9 变态跳台阶 递归和循环 10 矩形覆盖 递归和...
leetcode 剑指 Offer 50 ...用两个栈实现队列 - - leetcode 232 | lintcode 40 旋转数组的最小数字 - - leetcode 153 | lintcode 159 斐波那契数列 - - leetcode 509 | lintcode 366 二进制中 1 的
5.栈:用两个栈实现队列 6.旋转数组的最小数字 7.斐波那契数列 8.跳台阶 9.变态跳台阶 10.矩形覆盖 11.二进制中1的个数 12.数值的整数次方 13.调整数组顺序使奇数位于偶数前面 14.单链表:链表中倒数第k个结点 15....
用两个栈实现队列 -> 斐波那契数列/青蛙跳台阶 -> 旋转数组的最小数字 -> √矩阵中的路径 -> 机器人的运动范围 -> 没找到 -> (中文版) 剪绳子(dp) -> √二进制中1的个数 -> ->(升级版) √数值的整数次方(溢出...