题目:

用两个栈实现一个队列。

队列的声明如下:请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

思路:

根据栈的“先进后出”特点,如果将数据导入一个栈,再导入另一个栈,这样数据的出入顺序就变成了“先进先出”,即队列的特点。

假设有两个栈,stack1,stack2.

插入结点:直接压入stack1

删除结点:如果stack2为空,则将stack1中的结点导入stack2,;如果不为空,则从stack2弹出结点。

代码:

#include <iostream>
#include <stack>
#include <exception> using namespace std; template<typename T>
class CQueue{
public:
CQueue();
~CQueue(); void appendTail(const T& node);
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(){
if(stack2.size()<=0){
while(stack1.size()>=0){
T& data=stack1.top();
stack1.pop();
stack2.push(data);
}
}
// if(stack2.size()==0)
// throw new exception("queue is empty"); T head=stack2.top();
stack2.pop();
return head;
} int main()
{
cout << "Hello world!" << endl;
return 0;
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/54275ddae22f475981afa2244dd448c6?rp=1

AC代码:

class Solution
{
public:
void push(int node) {
stack1.push(node);
} int pop() {
if(stack2.size()<=0){
int data;
while(stack1.size()>0){
data=stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()<=0)
return -1;
int del=stack2.top();
stack2.pop();
return del;
} private:
stack<int> stack1;
stack<int> stack2;
};

(剑指Offer)面试题7:用两个栈实现队列的更多相关文章

  1. 剑指Offer:面试题7——用两个栈实现队列(java实现)

    题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...

  2. 剑指Offer - 九度1512 - 用两个栈实现队列

    剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入 ...

  3. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

  4. 剑指offer【05】- 用两个栈实现队列(java)

    题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...

  5. 剑指offer(9)——用两个栈实现队列

    题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 首先定义两个栈stack1. ...

  6. JS 剑指Offer(六) 用两个栈实现队列

    题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入 ...

  7. 剑指Offer-【面试题07:两个栈实现队列】

    package com.cxz.question7; import java.util.Stack; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail 和del ...

  8. 剑指offer(5)用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目分析 栈是先进后出,队列是先进先出,因此两个栈,一个用来push,一个用来pop,同时注意下两个栈不 ...

  9. 【剑指Offer】5、用两个栈实现队列

      题目描述:   用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.   解题思路:   本题的基本意图是:用两个后入先出的栈来实现先入先出的队列.对于这个问题,我 ...

  10. 【剑指Offer】05、用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题解一: //stack2有元素就pop,没有元素就将stack1中所有元素倒进来再pop public ...

随机推荐

  1. Linux_x64_Pwn溢出漏洞

    linux_64与linux_86的区别 linux_64与linux_86的区别主要有两点: 首先是内存地址的范围由32位变成了64位 但是可以使用的内存地址不能大于0x00007fffffffff ...

  2. python解析Nginx访问日志

    环境说明 python3+ pip install geoip2==2.9.0 nginx日志配置成json格式,配置如下: log_format json_log '{ "time&quo ...

  3. java float与double的范围和精度

    float与double的范围和精度 1. 范围  float和double的范围是由指数的位数来决定的.  float的指数位有8位,而double的指数位有11位,分布如下:  float:  1 ...

  4. PlayMaker的特殊事件FINISHED

    PlayMaker的特殊事件FINISHED   在PlayMaker中,每个状态机都有一个特殊事件START.当启用状态机,触发START事件.其中,每个状态都可以有一个特殊事件FINISHED.当 ...

  5. ironic简介

    转:https://doodu.gitbooks.io/openstack-ironic 简介 Bare Metal Servcie 裸机服务 -- 'bear betal' ironic简介 如今O ...

  6. Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)

    在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...

  7. jni java C/C++ 相互调用

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha java 中  声明 一个 native 方法 用javah命令 生成 包含 nativ ...

  8. SQL Server附加数据库提示“版本为661,无法打开,支持655版本……”

    在我们使用别人导出的数据库的时候,有时候我们会通过附加数据库的方法,把别人导出的数据库附加到我们的电脑中,这时,或许你会遇到这种问题,附加时,提示版本为XXX,无法打开,支持AAA版本. 这是怎么回事 ...

  9. 关于iis6.0远程溢出漏洞

    漏洞描述 漏洞编号:CVE-2017-7269 发现人员:Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院) 漏洞简述:开启WebDAV服务的IIS 6.0 ...

  10. Request Response 跳转页面的理解

    1.response 跳转页面 private void writeContent(String content) { HttpServletResponse response = ((Servlet ...