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

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

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值