大话数据结构 --第四章 栈和队列

本文详细解析了数据结构中的栈和队列,介绍了这两种结构的特点、存储方式及其应用,包括递归、四则运算和 JVM 方法加载等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开场白
上一节讲了数据结构中的线性表,本节对另外一个结构,栈和队列解析解析理解。
栈限定仅在表尾进行插入和删除操作的线性表。后进先出

队列是只允许在一段进行插入操作、而在另一端进行删除操作的线性表。 先进先出

栈的定义

栈是限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶,另一段 称为栈底。不含任何元素的栈叫空栈。栈又称为后进先出的线性表

栈的插入操作叫进栈,或称 压栈、入栈;栈的删除操作饺子出栈、也叫做弹栈

 

栈的顺序存储结构及实现

 也就是用一个数组来实现栈的操作,数组的a[0] 作为栈的底部, 每次加入元素和删除元素都从数组的尾部进行操作,因此该操作的复杂度都为O(1)

栈的链式存储结构及实现

用单链表来实现

栈的栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,所以链表的头部作为栈顶

对于链表实现的栈,基本不会出现栈满的情况,除非内存空间不够 了。

对于进栈操作,也就是将原来的头指针指向进栈元素,同时进栈元素的下一个节点是上一次的头元素。

对于出栈操作,也就是将原来的头指针指向出栈元素的下一个节点,同时删除该元素。

栈的作用:

上面讲了栈的功能可以用顺序表或链表来实现,那为啥还引用链表这种结构?

其实这相当于自行车、火车等交通工具方便了我们的出行是一个道理。栈也给我们某些应用场景提供了方便。

栈的应用

------递归

递归是我们程序中经常用到的方法,

以下是著名的裴波那契公式

要计算 n 的值,需要计算n-1 , n-2的值。依次类推,

栈的应用2---四则运算

1后缀表达式计算,比如计算式  9+3-1)*5+10/2

后缀表达式的意思是,所有的运算符都要在运算数字的后面出现,则上面的表达式的后缀表达式为 :9 3 1 -5 *+10 2/ +

其进栈的流程为:(遇到运算符的就将栈顶的两个元素取出进行计算,计算完成返回栈顶)

中缀表达式:平时我们写的表达式就是中缀表达式。中缀表达式怎么转换为后缀表达式?

栈的应用--jvm 加载方法

java 在调用一个方法的时候,会调用方法中引用的方法,直到最后一个函数。

其实它对的本质就是采用了栈的特性。

 

队列的定义

队列是只允许一端进行插入操作,而在另一端进行删除操作的线性表。是一种先进先出的线性表。

队列的存储也可以采用顺序存储结构或者是链式存储结构来实现。

总结

本章对 栈和队列这种数据结构进行了讲解,其本质是一种特殊的 线性表。栈是一种后进先出的结构,队列是一种先进先出的数据结构。同时也对栈和队列的一些应用场景进行了介绍。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_jt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值