《剑指offer》面试题7—用两个栈实现队列
题目:给出队列声明,要求实现AppendTail和DeleteHead函数。
template <typename T>
class CQueue
{
public:
void AppendTail(const T& element);
T DeleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
思路:要用两个先进后出的栈实现先进先出的队列。压栈总是压入stack1,要获得队列头时:如果stack2为空,则把stack1依次弹出栈并压入stack2,取stack2栈顶元素;如果stack2不为空,则直接取stack2栈顶元素。
#include <iostream>
#include <stack>
using namespace std; template <typename T>
class CQueue
{
public:
void AppendTail(const T& element);
T DeleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}; template<typename T> void CQueue<T>::AppendTail(const T& element)
{
stack1.push(element);
} template<typename T> T CQueue<T>::DeleteHead()
{
T temp;
if(!stack2.empty())
{
temp = stack2.top();
stack2.pop();
}
else
{
if(stack1.empty())
{
cout<<"No element left!"<<endl;
//return;
}
else
{
while(!stack1.empty())
{
temp = stack1.top();
stack1.pop();
stack2.push(temp);
}
temp = stack2.top();
stack2.pop();
}
}
return temp;
} int main()
{
CQueue<int> my_queue;
int n,val;
cout<<"1 for Append"<<endl<<"2 for DeleteHead"<<endl;
while(scanf("%d",&n)!=)
{
if(n == )
{
scanf("%d",&val);
my_queue.AppendTail(val);
}
else if(n == )
{
val = my_queue.DeleteHead();
cout<<"The head of Queue:"<<val<<endl;
}
else
cout<<"Illegal n!"<<endl;
}
return ;
}
《剑指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类型. 输入: 每个输入 ...
- 剑指offer第二版-9.用两个栈实现队列
描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...
- 剑指offer【05】- 用两个栈实现队列(java)
题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...
- 剑指offer(9)——用两个栈实现队列
题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 首先定义两个栈stack1. ...
- JS 剑指Offer(六) 用两个栈实现队列
题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入 ...
- 剑指Offer-【面试题07:两个栈实现队列】
package com.cxz.question7; import java.util.Stack; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail 和del ...
- 剑指offer(5)用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目分析 栈是先进后出,队列是先进先出,因此两个栈,一个用来push,一个用来pop,同时注意下两个栈不 ...
- 【剑指Offer】5、用两个栈实现队列
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路: 本题的基本意图是:用两个后入先出的栈来实现先入先出的队列.对于这个问题,我 ...
- 【剑指Offer】05、用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题解一: //stack2有元素就pop,没有元素就将stack1中所有元素倒进来再pop public ...
随机推荐
- 安装protobuf可能遇到的问题
下载protobuf-2.3.0: http://protobuf.googlecode.com/files/protobuf-2.3.0.zip http://code.google.com/ ...
- Openlayers中layer介绍
1.base layers & overlay layers base layer:最底层的layer,其它的图层是在他之上,最先增加的图层默认作为base layer. overlay la ...
- linux查看是否安装JDK(转载)
rpm -qa |grep java 看是否安装了java echo $PATH 看环境变量是否配置了java路径 find / -name java 查找java文件 一般linux服务器会自带jd ...
- centos6.4中文输入法安装和切换(转载)
1.用root登录,或者切换到root账户(su root): 2.yum install "@Chinese Support"; 3.exit: 4.System→prefere ...
- Oracle学习(十三):闪回
1.知识点:能够对比以下的录屏进行阅读 SQL> --1. 错误地删除了记录 SQL> --2. 错误地删除了表 SQL> --3. 查询历史记录 SQL> --4. 怎样撤销 ...
- Android自己定义控件--下拉刷新的实现
我们在使用ListView的时候.非常多情况下须要用到下拉刷新的功能.为了了解下拉刷新的底层实现原理,我採用自己定义ListView控件的方式来实现效果. 实现的基本原理是:自己定义ListView, ...
- javascript和c#的深度拷贝的一种通用方法
很简单,序列化后反序列化...
- windows 复制 文本文件内容 到剪切板
shell 打开 type filename | clip
- VB.Command()的参数
VB.Command()的参数的来源有三个地方 1配置文件2启动参数3框架
- Struts2基础知识
1.什么是Struts2框架? 答:struts2是一款优秀的mvc框架,集中解决了Controlller的相关问题,解决了部分视图相关的问题(struts2标签): mvc 是一种思想,包括Mode ...