利用两个栈来实现一个队列, 这个问题非经常见。  最关键的是要有好的思路, 至于实现, 那是非常easy的事情了。 在本文中, 也想说说自己的思路, 可是。 我认为用代码来表述思路更符合我的习惯。 也是我的菜, 所以, 只给出代码。 如有须要。 大家能够依据代码来理解思路。

OK, 没有必要废话了, 直接上代码:

#include <iostream>
#include <stack>
using namespace std; // 用两个stack实现一个queue, 以int类型为例吧
class MyQueque
{
private:
stack<int> s1; // s1负责入队
stack<int> s2; // s2负责出队 public:
// 入队
void push(int x)
{
s1.push(x);
} // 出队
void pop()
{
if(!s2.empty())
{
s2.pop();
}
else
{
while(!s1.empty())
{
int tmp = s1.top();
s1.pop();
s2.push(tmp);
} s2.pop();
}
} // 取头
int front()
{
if(!s2.empty())
{
return s2.top();
} while(!s1.empty())
{
int tmp = s1.top();
s1.pop();
s2.push(tmp);
} return s2.top();
} // 取尾
int back()
{
if(!s1.empty())
{
return s1.top();
} while(!s2.empty())
{
int tmp = s2.top();
s2.pop();
s1.push(tmp);
} return s1.top();
} // 求大小
int size()
{
return s1.size() + s2.size();
} // 推断是否为空
bool empty()
{
if(s1.empty() && s2.empty())
{
return true;
} return false;
}
}; int main()
{
{
MyQueque que;
que.push(1);
que.push(2);
que.push(3);
que.push(4);
que.push(5); while(!que.empty())
{
cout << que.front() << endl;
que.pop();
} cout << "-------------------" << endl;
} {
MyQueque que;
que.push(1);
que.push(2);
que.push(3);
que.push(4);
que.push(5); while(!que.empty())
{
cout << que.size() << endl;
que.pop();
} cout << "-------------------" << endl;
} {
MyQueque que;
que.push(1);
que.push(2);
que.push(3);
que.pop();
que.pop();
que.push(4);
que.push(5); while(!que.empty())
{
cout << que.front() << endl;
que.pop();
} cout << "-------------------" << endl;
} return 0;
}

结果:

1

2

3

4

5

-------------------

5

4

3

2

1

-------------------

3

4

5

-------------------

我写完上述代码后, 简单走读了一下代码, 并測试了一下, 初步发现还OK,   假设大家发现有什么问题。 欢迎指出, 在此,先感谢一下。

两个栈来实现一个队列的C++代码的更多相关文章

  1. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...

  2. java基础编程——用两个栈来实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目代码 /** * <分析>: * 入队:将元素进栈A * 出队:判断栈B是否为空, * ...

  3. 面试题9-用两个栈来实现一个队列,完成队列的Push和Pop操作

    题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 一个栈压入元素,而另一个栈作为缓冲,将栈1的元素出栈后压入栈2中 代码 import java.ut ...

  4. 剑指offer5:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    1. 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 2. 思想 (1)栈的特点是先进后出,而队列的特点是先进先出: (2)因此,入队列的情况和入栈的情 ...

  5. 剑指offer-用两个栈来实现一个队列-队列与栈-python

    用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:使用两个栈,stackA 用来接收node stackB 用来接收 stackA 的出栈 # -*- cod ...

  6. 使用两个栈来完成一个队列,需要是实现的功能有add,poll.peek

    2017-06-23 19:15:16 队列时先进先出型,而栈是先进后出型,这就需要建立一个联系.我想到的一个简单的表示方式是: 这样就需要两个栈,栈1是用来实现add操作,即直接push进去就行:栈 ...

  7. 一张图展示:用两个栈来实现一个队列,完成队列的Push和Pop操作

    一  基本思路 将s1作为存储空间,以s2作为临时缓冲区. 入队时,将元素压入s1. 出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒 ...

  8. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    // test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  9. 【算法】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer&g ...

随机推荐

  1. Ionic2中使用第三方插件极光推送

    不同于Ionic1中插件的调用,Ionic2提供了Ionic Native.Ionic Native封装了一些常见的插件(如:Camera.Barcode Scanner等),这些插件的使用方式在官方 ...

  2. ext2 与 ext3

    http://linux.vbird.org/linux_basic/1010appendix_B.php https://baike.baidu.com/item/Ext2/822106?fr=al ...

  3. 回文串(bzoj 3676)

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  4. pat 甲级 1135. Is It A Red-Black Tree (30)

    1135. Is It A Red-Black Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  5. Python操作MySQL[转]

    本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...

  6. 使用p6spy格式化日志输出

    P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,项目首 页:www.p6spy.com)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改.P6Spy 分发包包括P6L ...

  7. eclipse主题样式

    Eclipse Color Themeshttp://eclipsecolorthemes.org/ Get it Download from Eclipse Marketplace Install ...

  8. failed to obtain a cell from its dataSource 问题处理

    最近在处理bugly问题的时候,总会看到回话列表有奔溃,但是由于没有啥具体的细节原因也无从下手. 只知道ConversationListViewController这个类的奔溃,报的问题是这个,也只有 ...

  9. 16Aspx.com-PHP企业整站源码 景观石材大理石类织梦模板 含手机移动端 完整源码 APP+PC

    =============================================== 源码站长资源交易专业网-商业源码下载,VIP源码,程序交易,毕业设计交易,站长交易|- 16aspx.c ...

  10. 牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)

    H.武 链接:https://www.nowcoder.com/acm/contest/86/H 这个题写的有点想发脾气,自己的板子垃圾了,这个题要用优先队列优化版的迪杰斯特拉的板子才可以过,但是自己 ...