题目描述

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

一 . 概念!

首先要理解栈和队列的概念。

1. 栈:咱可以简单的把栈理解成装羽毛球的球桶、或者我们吃的桶装可比克薯片。为啥这么说呢,因为这两样东西都遵循着一个规律,即先进后出的规律,通俗解释一下:羽毛球是不是先放进去的会被压在最下面,我们每次拿出来的总是最后放进去的。

2 . 队列:队列直接理解成打饭排队好了,你排队排的早,打饭就打的早。

二 . 回归题目

这个题目的要求是用两个栈实现队列的操作,即把先进后出→先进先出。

怎么做呢,也不难,一个作为存储栈,一个作为寄存栈(平时为空),看下图。

三 . 代码实现

using System.Collections.Generic;
//命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。
//List、DIctionary、 Queue、 Stack、 SortedList
class Solution
{
public Stack<int> a = new Stack<int>();
public Stack<int> b = new Stack<int>();
int c;
public void push(int node)
{
//进栈和进队一样,没有什么特殊的地方
a.Push(node);
}
public int pop()
{
//出栈,当b为空栈,把a里面的数都压进b去
while(a.Count>)
{
int c = a.Pop();
b.Push(c);
}
//实现队列操作
int d = b.Pop();
//这里是为啥呢,要清楚一件事,也就是说,a你如果想继续进栈的操作
//只要b中还有数据源,就必须先把b里面的倒进a里面,再重复以上的动作
while(b.Count>)
{
int c = b.Pop();
a.Push(c);
}
return d;
}
}

剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列的更多相关文章

  1. 《剑指offer》— JavaScript(5)用两个栈实现队列

    用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 实现代码 function Stack(){ var item = []; this. ...

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

    题目: 用两个栈实现一个队列. 队列的声明如下:请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 根据栈的“先进后出”特点, ...

  3. 剑指offer第二版面试题8:用两个栈实现队列(JAVA版)

    题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. 分析: 我们通过一个具体的例子来分析 ...

  4. 剑指Offer的学习笔记(C#篇)-- 序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...

  5. 剑指Offer的学习笔记(C#篇)-- 反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...

  6. 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是 ...

  7. 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  8. 剑指Offer的学习笔记(C#篇)-- 和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  9. 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将  num1[0], num2[0 ...

  10. 剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以 ...

随机推荐

  1. AR模型脱卡,unity端实现步骤详情

    AR模型脱卡unity端实现具体步骤 AR模型脱卡的原理 利用一些unity端AR插件做AR应用.通常会有一个需求,当识别物消失的时候,将3D模型从识别物这个父物体上移除,显示在屏幕中央.那么原理就显 ...

  2. Carthage的使用

    1.安装Carthage https://github.com/Carthage/Carthage/releases 2.进入Cartfile文件所在的目录地址 cd 拖入文件Cartfile,把最后 ...

  3. Codeforces Round #461 (Div. 2) B C D

    题目链接:http://codeforces.com/contest/922 B. Magic Forest time limit per test 1 second memory limit per ...

  4. SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 题意: 有n个礼物盒,m个人. 最开始每个礼物盒中都有一个礼物. m个人依次随 ...

  5. jQuery 中的常用函数

    on() : 方法在被选元素及子元素上添加一个或多个事件处理程序.自1.7 版本起,on()方法是 bind(),live() 和 delegate()方法的替代品 语法: $(selector).o ...

  6. Android SDK和NDK

    NDK是用来给安卓手机开发软件用的,但是和SDK不同的是它用的是C语言,而SDK用的是Java语言.NDK开发的软件在安卓的环境里是直接运行的,一般只能在特定的CPU指令集的机器上运行,而且C语言可以 ...

  7. Linux_服务器_03_xxx is not in the sudoers file.This incident will be reported.的解决方法

    1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去. 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件vi /etc/sud ...

  8. nginx的fastcgi_param参数详解

    在配置nginx的时候,有很多fastcgi_param参数,具体对应是什么值呢 引入:fastcgi_params 文件: fastcgi_params文件具体内容: postman 发送请求: n ...

  9. java中路径的获取

    网上摘录 (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getReque ...

  10. nginx rewrite 导致验证码不正确

    配置nginx里url rewrite的时候,为了使浏览器地址栏的URL保持不变, 使用proxy_pass反向代理,但发现每次都会生成新的jsessionid 解决方法,配置中增加 proxy_co ...