利用两个栈来实现一个队列, 这个问题非经常见。  最关键的是要有好的思路, 至于实现, 那是非常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. 很好用的取代 PuTTY 的SSH远程登陆软件 Termius

    一直以来, 我都是用 PuTTY 一个窗口一个窗口来监视我所有的远程服务器. putty-connections-on-a-screen 总感觉非常的不方便, 特别是当远程链接断开需要再重新打开PUT ...

  2. div模拟dropdownlist控件 div下拉菜单

    原文发布时间为:2009-10-16 -- 来源于本人的百度文章 [由搬家工具导入] 控件发布:div2dropdownlist(div模拟dropdownlist控件) div3dropdownli ...

  3. onbeforeunload 的使用

    原文发布时间为:2008-10-20 -- 来源于本人的百度文章 [由搬家工具导入] onbeforeunload 可以在页面关闭,刷新,跳转时弹出提示信息,防止意外的跳转使得当前页的表单内容被清空。 ...

  4. The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

    The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc' (are you missing ...

  5. error LNK2001: unresolved external symbol __imp__WSAStartup@8 SOCKET(转)

    VC6.0下的错误信息: error LNK2001: unresolved external symbol __imp__socket@12 error LNK2001: unresolved ex ...

  6. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---32

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  7. 打造好用的编辑终端环境yakuake

    我喜欢使用vim,由于不喜欢不够纯粹的东西,所以将伪终端打造的和真终端几乎一样,我的yakuake全屏是真的全屏,你也想这样,跟我来吧. 一.修改yakuake的皮肤文件,在/usr/share/ya ...

  8. C#图片转成流,流转成图片,字节转图片,图片转字节的方法

    图片转成流 Bitmap b = new Bitmap(Server.MapPath(ppath)); Stream ms = new MemoryStream(); b.Save(ms, Syste ...

  9. hdu 3986(最短路变形好题)

    Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/6553 ...

  10. DB2数据库报 [SQL0805N Package "NULLID.SQLLD003" was not found.]

    解决办法: cd /home/db2inst1/sqllib/bnddb2 bind @db2cli.lst blocking all grant public sqlerror continue C ...