1

你还不懂栈和队列的实现吗?(图解剖析)

 2 years ago
source link: https://blog.csdn.net/m0_61784621/article/details/123501908
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
联系方式(qq):623847465        gitee(码云):  Mercury. (zzwlwp) - Gitee.com 

吃得了符号的亏,上得了大小写的当,你方可成为大牛!😎

为系统而生,为框架而死,为Debug奋斗一辈子!🦍


可算是把链表给结束了,很多小伙伴已经迫不及待想看到栈和队列了,那么它来了!相信有了顺序表和链表的基础,栈和队列对于你们来讲也是轻轻松松,那我就废话不多说,直接进入今天的重点:

⚽ 1、栈的介绍

🥎 2、栈的常用接口实现

🏐 3、队列的介绍

🏀 4、队列的常用接口实现


⚽  1、栈的介绍:

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据也在栈顶。

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上 插入数据的代价比较小。

本次我们是用动态数组来实现栈!静态栈在实际中一般不实用!

🥎 2、栈的常用接口实现 

 🎸 首先是我们动态栈的结构:

 有了顺序表和链表的基础我就直接上代码了!

🎻 栈的初始化:

 ⛳ 入栈操作:

 🎋 出栈操作:

出栈就很简单了,我们直接使top--就可以了,因为我们插入数据是先在top位置插入,然后再top++,这样我们下次插入数据就会覆盖pos位置的数据!注意:当栈没有初始化,没有数据的情况下不能进行出栈操作!

 🎁 取栈顶元素操作:

 我们知道top是栈顶元素的后一个,所以我们直接取top-1下标位置的数据就可以!

🎨  求栈的节点个数:

🎠 判断栈是否为空:

 我们使用返回值为bool型的函数,bool类型只会返回true或false见下代码:

 🎍 销毁栈操作:

 记得养成释放动态内存的习惯哦!

 栈相对来说还是比较简单了,栈的基本接口就到这里了,下面我们来实现队列的基本接口操作!


 🏐 3、队列的介绍

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列,进行删除操作的一 端称为队头

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构, 出队列在数组头上出数据,效率会比较低。

🏀 4、队列的常用接口实现 

🧦 队列的结构: 

 结构搭建这里我们就不多说了,直接走代码!

🥽 队列的初始化:

这里我们只需要初始化队头指针和队尾指针就可以了! 

🎭 队尾入节点:

 👔 队头出节点:

👗  取队头节点数据:

👜 取队尾节点数据:

🧨  求队列节点个数:

🎆 判断队列是否为空:

跟上面栈一样使用bool型类型

🎇 销毁队列操作:

其实栈和队列这一章算简单的,如果有前面顺序表和链表的基础,这个就是轻轻松松的事,所以我只在重点的地方画了图解,没画图解的地方相信小伙伴们也是看得懂的


最后又到了爱打篮球的程序员的鸡汤时刻:含泪播种的人一定能含笑收获!加油,祝你我!

 联系方式(qq):623847465        gitee(码云):Mercury. (zzwlwp) - Gitee.com       

下期预告:二叉树


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK