首页 > 编程知识 正文

定义栈的数据结构,栈在数据结构中的解释

时间:2023-05-04 13:51:28 阅读:246883 作者:1061

写在前面的话——努力不晚

博主是某985学校数字媒体技术专业的本科在读生,即将成为大四狗,今后打算国内读研。

因为数媒专业设置的缘故,前两年尝试了很多艺术和设计方面的东西:素描、设计原理、UI、视频剪辑等等,但身在软件学院,又接触了很多和软件工程相关的专业课,可以说方向很多,但是让人眼花缭乱。

我记得大二下学期的三维建模(理论课,很多是数学的东西)课上老师问我们有多少人喜爱编程,当时20多个人的班上就2、3个人举手,我并没有举手。老师看到后很感叹,因为院里面数媒作为一个交叉专业,很容易让这个阶段的本科生纠结。大一大二的很多基础课里,老师把我们作为一个比较特殊(编程较弱)的团体,很多软工的课程设计、实训我们都没有,所以编程锻炼很少。(所幸我的后一届开始已经加上这些课设和实训)

随着到了大三,和软工的分界更为明显,学习了专属专业课:计算机动画、3ds max建模、Maya建模、曲线曲面造型、游戏制作(理论、写文档和unity实践)、虚拟现实、OpenGL等。对行业了解更多,也更充分感受到编程的重要性;在学习曲线曲面造型(用C和OpenGL)以及游戏制作实训(unity 3D)后,发现自己原来对编程没有那么讨厌,甚至很有成就感。这让我反思到之前也许只是一味回避,没有去尝试,自然也咀嚼不出甘甜。

在这个时间节点,不论是面对即将来临的保研、考研、面试,亦或是将来的研究生学习和就业,编程的基础都是我需要从头捡起来的。前段时间发现阅读程序的时候要去查很多语法和用法,从头理解,让我觉得大一的时候没有把C语言和数据结构的基础打牢非常遗憾。但是一味消沉并不是我的作风,行动起来才是关键。希望能通过这些总结让自己的知识体系更牢固,也欢迎各位的交流和指教。

2017年8月3日

栈 1、何为“栈” 武汉有一条著名的美食小吃街叫做“户部巷”,天天人流如织,愤怒的金鱼记的热干面、四季美的汤包、三鲜豆皮等小吃让人流连忘返。户部巷里有一栋古老的建筑叫做“祥盛堆栈”,是早些时候在码头做生意的人用来堆放货物的地方。堆栈的出现为生意人节省了空间、带来了方便,通常人们堆放物品的时候总是习惯把耐压的大件放在下面,易碎的小件放在上面;堆栈中的物品大多都是货物,因此得轻拿轻放,为了防止货物摔落,得一件件从上拿起,最底下的货物得等所有头上的货物搬开后才能搬走。

2、栈的定义 堆栈在现实生活中是一种很常用的行为,在计算机语言中,也把堆栈称为栈,它的定义是:一种限定仅在表尾进行插入或删除操作的线性表。把句子进行提炼,“堆栈是一种限定操作的线性表”,也就是说其本质还是线性表,那么它就自然地继承了线性表的性质。
【线性表】 我们先来看一下线性表,简明定义:线性表是n个数据元素的有限序列。 通常把线性表的特点概括为以下四点: 1)有惟一的首元素。这个首元素只是被称作“第一个”,且只是相对整个线性表而言。 2)有惟一的尾元素。同样尾部也只是一个元素。 3)除首元素外,每个元素只有一个前驱。 4)除尾元素外,每个元素只有一个后继。
线性表这种结构“牵一发而动全身”,可以把它当做一挂鞭炮,每一个炮仗是一个数据元素,中间的导线是元素间的指针,引线就是首元素的位置。
我们可以点燃鞭炮中间任何一点的导线,鞭炮会分头炸完(危险勿试),这是因为对于每一点的数据元素都有传递的指针,这些指针贯穿了整个线性表。 我们可以把每个炮仗的火药倒出来,它的节点处会变为导线连接上下两个炮仗(线性表的删除)。 我们也可以找到加入点,把前后两端的引线绕到新的炮仗上面,使得它成为原前驱元素的后继,原后继元素的前驱(线性表的插入)。 。。。。。。 线性表的相关知识就补充这些,读者如果想了解更全面和frdxbw的定义可以在网上搜或者参考各种数据结构的教材。
【限定操作】 我们接着来看 堆栈 ,堆栈的定义中还明确指出了“ 仅在表尾进行插入或删除 操作”。这意味着堆栈经过了更frdxbw的“封装”,我们不能像线性表那样直接去提取其中任意条件,而是要遵守“表尾操作”的规则,这个规则叫做“先进后出”(FILO,First In Last Out)。
从字面上不难理解这个概念,相当于是把货物往仓库(栈)里堆压,值得一提的是这里的栈顶是表尾,栈底是表头,即这个线性表是“头朝下”的,由于可以通过malloc函数或者是声明数组的方式来构建栈,在表尾操作只需要每次往后加一个或者往前减一个,不会对整个表产生其它的影响。

3、栈的运作方式 栈最重要的操作是入栈出栈,当栈顶指在栈底的位置的时候栈为空。 栈的运作过程如下:

注释:从上往下从左往右是图一至图五,top为栈顶,bottom为栈底
图一:栈为空。top指向bottom所在位置。 图二:元素a入栈。a记入top所在的位置,top指向下一个元素位置。 图三:元素b、c入栈。同上,top向上(线性表中向后)两个位置。 图四:元素c出栈。出栈操作,top向下(线性表中向前)一个位置,此处c被删除,然而在实际操作中,通常省略删除操作,当下一次有元素入栈时直接将其覆盖。 图五:元素d、e、f入栈,top指向顶端(线性表表尾)。 我们可以清楚从图中发现,指针top总是在栈顶元素的上方。
4、使用堆栈的意义 由理论转向生产实践之前需要对理论的核心有深刻的了解,才能发挥出其最大价值。 对于堆栈,我们要看的就是它的“核心”——先进先出。先进先出的特性使得我们能很轻易得到输入当中最后的元素,同时整个表中的元素也是按照frdxbw先后顺序没有插队的。 由此在数值转换(一直进行求余,余数需要顺序保存,逆序输出)、括号匹配(顺序等待不同优先级符号进入)、hanoi塔(递归求解)等问题的求解上就能派上很大用场。 在文章最后我想说的是,在再一次梳理数据结构相关知识的过程中,我领悟到:无论是学习还是生活都时刻处在解决问题的过程中,编程是解决问题的高效工具。针对问题选取恰当的数据结构,能把注意力更多放在问题本身。我想这个意义足够重大。
C++环境/编译并运行的流程分析小程序中如何实现excel数据批量导入

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。