题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
设两个栈为stack1,stack2;
1:首先想到最简单的方法:是入栈时将数据压入stack1,出栈时将stack1中的元素出栈压入stack2,在将stack2栈顶元素弹出,再将stack2中的剩余元素重新压入stack1,
这种方法很低效可想而知。
2:改进一下:入栈时检查stack1,如果stack1为空则元素全在stack2中,所以将stack2中的元素压入stack1中(记得检查stack2是否为空),再将元素入栈,如果stack1不为空直接将元素压入栈,同样出栈时检查stack2,如果为空将stack1中的元素压入stack2再将栈顶元素出栈,如果不为空直接将栈顶元素出栈。
 
方法2的c++代码实现:
 
 
class Solution
{
public:
void push(int node) {
if (stack1.size() != ) stack1.push(node);
else{
int n = (int)stack2.size();
for (int i = ; i < n; i++){
stack1.push(stack2.top());
stack2.pop();
}
stack1.push(node);
}
} int pop() {
if (stack2.size() != ) {
int temp = stack2.top();
stack2.pop();
return temp;
}
else {
int n = (int)stack1.size();
for (int i = ; i < n - ; i++){
stack2.push(stack1.top());
stack1.pop();
}
int temp =stack1.top();
stack1.pop();
return temp;
} } private:
stack<int> stack1;
stack<int> stack2;
};

在网上找到一种更高效的方法:入栈时直接将元素压入stack1,出栈时检查stack2,如果为空将stack1中的元素压入stack2,如果不为空直接将stack2栈顶元素出栈,很巧妙

class Solution
{
public:
void push(int node) {
stack1.push(node);
} int pop() {
int temp;
if (!stack2.empty()) {
temp = stack2.top();
stack2.pop();
return temp;
}
else {
int n = stack1.size();
for (int i = ; i < n; i++){
stack2.push(stack1.top());
stack1.pop();
}
temp = stack2.top();
stack2.pop();
return temp;
}
}

(原)剑指offer之栈和队列的更多相关文章

  1. (5)剑指Offer之栈变队列和栈的压入、弹出序列

    一 用两个栈实现队列 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 问题分析: 先来回顾一下栈和队列的基本特点: 栈:后进先出(LIFO) 队列: ...

  2. 剑指offer 5.栈和队列 用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.   解题思路:1,整体思路是元素先依次进入栈1,再从栈1依次弹出到栈2,然后弹出栈2顶部的元素,整个过程 ...

  3. 【剑指Offer】栈的压入、弹出队列 解题报告(Python)

    [剑指Offer]栈的压入.弹出队列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  4. 《剑指offer》栈的插入弹出序列

    本题来自<剑指offer> 栈的插入弹出序列 题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2, ...

  5. 剑指Offer:栈的压入、弹出序列【31】

    剑指Offer:栈的压入.弹出序列[31] 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈 ...

  6. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

  7. 剑指 Offer 31. 栈的压入、弹出序列

    剑指 Offer 31. 栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某 ...

  8. 【Java】 剑指offer(31) 栈的压入、弹出序列

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否 ...

  9. 剑指offer(13)-栈的压入、弹出序列 九度1366

    题目来自剑指offer系列 九度 1366:http://ac.jobdu.com/problem.php?pid=1367 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列 ...

随机推荐

  1. POJ-3159-Candies-(差分约束,Dijkstra)

    链接:https://vjudge.net/problem/POJ-3159 题意: N个小孩,M个约束 以A,B,C给出.即小孩B的糖果不能比A多C以上. 思路: 差分约束: 若有 A-B < ...

  2. JAVA常用知识总结(十四)——Servlet

    Servlet属于线程安全的吗? Servlet不是线程安全的! 谈谈转发和重定向的区别 请求转发: request.getRequestDispatcher("/king_l2lu.jsp ...

  3. springCloud当中Eureca sever当中Camden到底是什么?

    [学习笔记] 做个普通的maven project,quickstart archetype.改成jdk.8.下面Camden.SR1是版本名,springcloud的版本名称很奇特,它是按照伦敦地铁 ...

  4. tomcat在idea中启动乱码

    server,localhost log,catalina log分别乱码 打开tomcat/conf/目录下修改logging.properties 找到"utf-8"行更改为 ...

  5. [转]Java 8 Optional类深度解析(null处理)

    原文链接:http://www.importnew.com/6675.html 本文由 ImportNew - 高俊阳 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 身为一 ...

  6. hihocoder1068 RMQ-ST算法

    思路: 这是ST表模板.遇到一道indeed笔试题需要用这个算法,顺便学习一下.那道题是说给定一个一维数组和一些查询[Li, Ri],要求计算[Li, Ri]区间内子段和的绝对值的最大值.解法是使用S ...

  7. uvm_base——打好你的基础

    uvm_base 是个很有意思的文件,这是UVM很巧妙的设计,将所有在base中包含的文件都包含在uvm_base.svh, 这样很方便管理各个文件直接的关系,而且还可以看出一些我之前没看过的东西,比 ...

  8. 安装MySQLdb出现HAVE_WCSCOLL重定义问题的解决方法

    root@wodeyitian MySQL-python-1.2.3]# python setup.py install running install running bdist_egg runni ...

  9. [windows]设置使用空白密码进行远程登录

    前提:系统用户设置了空白密码 方法1步骤: 开始菜单--〉运行--〉输入:gpedit.msc--> 计算机配置--〉Windows设置--〉安全设置--〉本地策略--〉安全选项:帐户:使用空白 ...

  10. C语言中的二级指针(双指针)

    原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7220688 C语言更多查看 C语言使用注意事项(一) C语言使用注意事项(二) ...