C++版 - 剑指offer 面试题7:用两个栈实现队列 题解
用两个栈实现队列
参与人数: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
C++版 - 剑指offer 面试题7:用两个栈实现队列 题解的更多相关文章
- 剑指Offer:面试题7——用两个栈实现队列(java实现)
		
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...
 - 剑指Offer - 九度1512 - 用两个栈实现队列
		
剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入 ...
 - C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
		
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
 - C++版 - 剑指offer 面试题5:从尾到头打印链表 题解
		
面试题5:从尾到头打印链表 提交网址: http://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tq ...
 - 剑指Offer-【面试题07:两个栈实现队列】
		
package com.cxz.question7; import java.util.Stack; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail 和del ...
 - 剑指offer【05】- 用两个栈实现队列(java)
		
题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...
 - 剑指offer(5)用两个栈实现队列
		
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目分析 栈是先进后出,队列是先进先出,因此两个栈,一个用来push,一个用来pop,同时注意下两个栈不 ...
 - 【剑指Offer】5、用两个栈实现队列
		
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路: 本题的基本意图是:用两个后入先出的栈来实现先入先出的队列.对于这个问题,我 ...
 - 剑指offer(9)——用两个栈实现队列
		
题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 首先定义两个栈stack1. ...
 - 【剑指Offer】05、用两个栈实现队列
		
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题解一: //stack2有元素就pop,没有元素就将stack1中所有元素倒进来再pop public ...
 
随机推荐
- String  StringBuilder  包装类
			
1. String 概述 程序中直接写上双引号的字符串就在字符串常量池中,new的不在池当中 java6之前常量池在方法区,java7以后将字符串常量池放在堆中 因为字符串是对象,应该在堆中 相同的字 ...
 - 解决 ERROR: missing Change-Id in commit message footer 问题
			
提交代码操作 git push origin HEAD:refs/for/XXX,提示失败ERROR: missing Change-Id in commit message footer,丢失Cha ...
 - java34
			
局部内部类:定义在方法中的类 -1局部类中可引用局部变量(定义在方法中的变量),但是局部变量必须已经初始化, 因为局部变量前默认带着final. 2.局部内部类的东西只能在定义的方法中使用(在方法中创 ...
 - ConcurrentDictionary
			
ConcurrentDictionary ConcurrentDictionary一大特点是线程安全,在没有ConcurrentDictionary前 在多线程下用Dictionary,不管读写都要加 ...
 - Js2WordCloud 词云用法
			
1.引入 npm 安装: npm install js2wordcloud --save 通过script引入: <script src="dist/js2wordcloud.min. ...
 - Combo控件失效
			
问题:点击combo控件,下拉选项不显示. 解决:注释HandleMessage中的MessageHandler相关语句,正常下拉.
 - 欧拉函数-gcd-快速幂(牛客寒假算法基础集训营1-D-小a与黄金街道)
			
题目描述: 链接:https://ac.nowcoder.com/acm/contest/317/D来源:牛客网小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们拿 ...
 - appium:运行脚本时,报404的解决办法
			
对于报404的错,不要怀疑,在环境正常的情况下,一定是你的端口被占用了. 就用:查看端口:netstat -aon|findstr 5037 查看进程:tasklist /fi "PID e ...
 - JAVA执行远端服务器的脚本
			
JAVA执行远端服务器的脚本 问题描述 实现思路 技术要点 代码实现 问题描述 工作中遇到这样一个问题,我们的应用为了实现高可用会采取双机部署,拓扑图大致如下: 这种方案可以简单的保证高可用,即便应用 ...
 - Spring的声明式事务管理<tx:advice/>
			
<tx:advice/> 有关的设置 这一节里将描述通过 <tx:advice/> 标签来指定不同的事务性设置.默认的 <tx:advice/> 设置如下: 事务传 ...