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

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

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

栈的定义

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

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

 

大话数据结构 --第四章 栈和队列_第1张图片

栈的顺序存储结构及实现

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

栈的链式存储结构及实现

用单链表来实现

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

大话数据结构 --第四章 栈和队列_第2张图片

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

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

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

栈的作用:

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

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

栈的应用

------递归

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

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

大话数据结构 --第四章 栈和队列_第3张图片

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

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

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

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

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

大话数据结构 --第四章 栈和队列_第4张图片

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

栈的应用--jvm 加载方法

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

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

 

队列的定义

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

大话数据结构 --第四章 栈和队列_第5张图片

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

总结

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

 

 

 

你可能感兴趣的:(数据结构)