白话栈:这可能是你见过的对栈最白话的解说了

ps:本文出现人物包括:学霸“小鹏”,学渣“小狸”,“叫兽”陈老师,以及XXX厂的高级算法工程师“小吴。


早晨7点钟左右,一批学生在校门口集合。”┗|`O′|┛ 嗷~~,这个阿陈,硬是要我们这么早就集合,明明现在才7点多,离真正的集合时间还差很久呢!困死了”!“其实早些来也不错,早起的鸟儿有虫吃嘛“!听到小狸的牢骚,小鹏劝慰道。”对,小鹏说的对,早起的鸟儿有虫吃,可是早起的虫儿就得被鸟吃了,你说是吧,小狸同学“!女老师陈”叫兽“突然冷不丁地从小狸身后说出这一句话,把小狸从困觉中拉了出来。…5分钟过后集体出发前往XX厂

”今天我们要去参观XXX厂,XXX厂是国内很有名的一个IT公司,有很多优秀的人,你们可以向他们请教一些问题,里面有很多是我带出来的学生哦!““老师又在吹牛了…",“就是,每次上课都听腻了…”…伴随着欢声笑语,大家很快就到了XX厂的大门口,好了,你们慢慢逛,中午12点半在大门口集合,注意安全!”

“小鹏你打算去哪里玩?""昨天不是刚学了栈嘛,我还不太理解,XX公司的算法工程师听说都很厉害,我想去请教一下他们。”“那我陪你吧,说实话阿陈讲得我一头雾水。”

XX厂得负责人:你们好,请问有什么需要我服务的吗?

小鹏:你好,我们有些问题想请教一下这里的算法工程师,可以麻烦您带一下路吗?

负责人:说到算法的话,就要去找我们的高级算法工程师小吴了,刚好他现在有空,而且还很乐于助人,你们来对时机了。走,我带你们去找他。

办公室里

小吴:你们好,听说你们有关于算法的问题想要问我,问吧!

小鹏:您好!就是我们昨天教了栈的知识嘛,然后老师讲得模棱两可,所以想趁着这次机会向您请教加深理解。

小狸:麻烦你从基础给我们讲一下吧!说实话我连最基本的实现都还搞不懂。

小鹏:我也可以加深基础的巩固。

小吴:好,那我们就开始吧。首先我们要先实现栈,再给其添加一些常态功能,也就是增删改查,再最后进阶,去实现一些高级算法或者复杂功能。一天内要讲这么多,你们得跟上来。

小鹏、小狸:嗯,一定。

小吴:那好,我们开始吧!首先是栈的实现。我们可以用数组来实现、亦可以用链表来实现,不过看你们现在的基础还是用数组来实现吧!不过等你们熟悉链表后一定要用链表来实现哦!

小鹏、小狸:(虽然很不服气,但现在的基础确实还不够)嗯,等熟悉链表后一定要用链表来实现一下栈。保证不辜负您。

小吴:你们没有什么亏欠我的,学习是学给自己看的,做事是做给自己看的。首先对于栈,我们要知道它是“先进后出”的。

小鹏:第一个数据进入便会最后一个出来,就像一个装东西的有底的桶,第一个放进去的东西一定只能最后一个拿出来

小狸:那第一个数据岂不是很爽,活得早死得晚。

三人发出笑声

小吴:再来,栈就相当于一个桶,我们往里头存数据,就要给它定义一个额度maxsize,同时还要定义一个指针pointer,并要求pointer=-1,每存入一个数据,pointer++。

小狸:为什么pointer要等于-1而不能是0呢?

小鹏:我们这个栈是用数组实现的,数组的下标是以0为开始的,而pointer最开始所指向的并没有实值,所以要从-1开始。

小吴:说的好,那么我们接下来来实现一下吧!

其次,实现增删该查的功能:

首先是增加,注意我们不管是进行增加删除还是显示数据,都必须先保证栈里面是否有数据或者栈是否满了,例如:

判断栈空及栈满:

增加数据:

删除数据,在删除数据这里我们选择抛异常处理,当然也可以不用,”装逼“用用还是不错的:

显示全部数据:

接下来就是写测试类来实现这个栈了,时间问题这个你们就自己去实现了,我接下来给你们将一些高级一点的内容.

小鹏:好的,受益匪浅啊!

小狸:确实,比老陈讲的易懂多了。

小吴:老陈?

小鹏:怎么了?

小吴:没事,我们继续吧。接下来我给你们介绍一下栈的两个算法,第一个是用栈来实现计算器的功能,另一个是给你们两个栈,实现”先进先出“也就是队列的功能!你们先思考一下,十分钟分钟后给我思路,可以讨论一下。

于是乎,”叽叽呱呱,呱呱叽叽,叽叽喳喳,渣渣叽叽…“十分钟就这样过去了

小吴:怎么样?讨论的思路如何?说说看?

小鹏:嗯,我们讨论的结果是这样的:首先是实现计算器问题,可以构建两个栈,一个存数字,一个存符号,给个指针从头开始遍历,遇数进数栈,遇符号进符号栈。

小吴:嗯,可以,但这里面还有一个符号优先级的问题呢!

小狸:嘿嘿,如果碰到像*或者/等的具有更高优先级的符号时,可以把这个符号以及相应的数先弹出来进行相应的操作,运算结果也就是数字再进栈就好了。一个小小的计算器问题居然要考虑到这么些细节性的问题,做算法问题确实得心够细啊!

小吴:哈哈哈,这么个问题就让你们感慨这么多,那以后要是做那么多题那还不得感慨无限多了。0K,那第二道题呢,有什么想法?

小鹏:对于双栈实现队列,把数据先全部装入一个栈,然后再将数据从这个栈再移入另一个栈再弹出就实现了”先进先出“的队列的功能了。

小狸:而且数据必须是一次性装入第一个栈,并且在装入第二个栈时那个栈不能留有数据。

小吴:可以啊,那我们接下来…

"哦,你们在这里啊,没戴表吗,都几点了?"陈”叫兽“破门而入,未闻其人,先闻其音;”哇,糟了,现在都12点40分了,我们给忘了,抱歉“。”咦,这不是小吴吗?“

”嗯?老师,您怎么来了?这两个是您的学生?“”对,我们要集合了,就先走了,有空再聊。你们两个,快走,都在等你们呢!“


小吴站起来走到窗口,看到陈”叫兽“一行人,”祝你们好运“。小鹏他们当然不可能听到这句话,他们也当然不可能知道,小吴当年也是听着陈”叫兽“那模棱两可的话学的数据结构与算法,他完全可以想像小鹏、小狸他们接下来会经历怎样的痛苦,毕竟,他全都经历过!

白话栈:这可能是你见过的对栈最白话的解说了相关推荐

  1. 【 第2关:双栈的基本操作】【编程题实训-栈】【头歌】【bjfu-241】

    任务描述 本关任务:将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端.当第0号栈的栈顶指针top[0]等于-1时该栈为空:当第1号栈的栈顶指针top[1]等于m时,该栈为空. ...

  2. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  3. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

  4. 顺序栈初始化,判空,进栈,出栈,打印

    #include<iostream>#define maxSize 100 //后面没有分号 ; using namespace std;typedef struct //顺序栈的定义 { ...

  5. 你只知道JVM栈,知不知道栈帧、局部变量表、slot、操作数栈?

    目录 虚拟机栈基础 虚拟机栈出现的背景 栈是运行时的单位,而堆是存储的单位 Java虚拟机栈 栈中可能出现的异常 设置Java栈大小 栈中存储什么? 栈运行原理 栈帧的内部结构 每个栈帧中存储着 局部 ...

  6. 两个栈实现一个队列/两个队列实现一个栈

    http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...

  7. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理

    栈基本工作原理 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第 ...

  8. java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...

    import java.util.Stack; public class ReverseStackRecursive { /** * Q 66.颠倒栈. * 题目:用递归颠倒一个栈.例如输入栈{1,2 ...

  9. 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈

    题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...

最新文章

  1. DirectX903D 颜色
  2. HTML特殊字符过滤器
  3. 构建一个增量推荐系统
  4. BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)
  5. Eclipse 工作空间(Workspace)---Eclipse教程第07课
  6. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍
  7. 平庸技术流,用 WebApi +AngularJS 实现网络爬虫
  8. java list 重复对象_list集合去除重复对象的实现
  9. python多进程线程学习_python进程、线程的学习心得
  10. Weblogic负载均衡/Session复制之集群架构
  11. USB转TTL、USB转232的区别
  12. linux安装Hive(Hive-2.3.7)
  13. 给Java程序猿们推荐一些值得一看的好书
  14. windows查看md5命令
  15. linux 块设备 dm,[CentOS7]dm块设备删除
  16. 罗辑回归,Logistic Regression(or sigmoid function)
  17. modelsim 常用快捷键
  18. Star CCM+ Interface踩坑——表面发射率
  19. 14.2 Numpy实现逆傅里叶变换
  20. ecshop首页幻灯片大小设置

热门文章

  1. windows服务安装(System.ComponentModel.Win32Exception:远程过程调用失败)
  2. HP打印机将介质装入纸盒1
  3. 按下键盘,写下心情,记下寂寞
  4. 《小额贷款操作系统》MVC文献
  5. python3使用19行代码实现爬取传智播客官网的讲师图片
  6. Kodein在ktor中的使用
  7. 基于java的快递物流查询系统_毕业论文-快递管理基于java的物流快递管理系统设计.doc...
  8. Mini Crossbow AAT自动跟踪云台设置(配合TeleFlyTiny模块)
  9. 石油测井主要的五大方法
  10. ipad 键盘 滚动屏幕_为什么iPad上没有显示屏幕键盘?