利用两个栈来实现一个队列, 这个问题非经常见。  最关键的是要有好的思路, 至于实现, 那是非常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. 添加一种emit的应用,反射发出,较直接调用稍慢,但好过反射与表达式树。

    System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add", System.Reflection. ...

  2. [LeetCode] Sudoku Solver 解数独,递归,回溯

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  3. android基本控件学习-----ProgressBar

    ProgressBar(进度条)讲解 一.常用属性和基础使用实例 (1)常用属性: android:max:进度条的最大值 android:progress:进度条已完成进度值 android:pro ...

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

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

  5. java基于udp实现键盘录入聊天

    发送端 package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Data ...

  6. LeetCode OJ--Linked List Cycle **

    https://oj.leetcode.com/problems/linked-list-cycle/ 判断一个链表是否为循环链表(这个链表可能是 1 2 3 4 然后4指向2) 巧妙的方法:设置两个 ...

  7. Spring Cloud Feign 声明式服务调用

    目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? ​ 通过对前面Sp ...

  8. Java 8 Comparator: 列表排序

    在本文中,我们将看到几个关于如何在Java 8中对List进行排序的示例. 1.按字母顺序排序字符串列表 List<String> cities = Arrays.asList( &quo ...

  9. java JIT AOT

    作者:ETIN链接:https://zhuanlan.zhihu.com/p/27393316来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. I guess anyon ...

  10. GCJ——Minimum Scalar Product(2008 Round1 AA)

    题意: 给定两组各n个数,可任意调整同一组数之中数字的顺序,求 sum xi*yi i=1..n的最小值. Small: n<=8 abs xy,yi<=1000 Large: n< ...