自学嵌入式第19天(数据结构篇——栈)

可以使用两种方式创建和使用。

栈的特点是先进后出,只能在栈顶操作数据,栈底不能进行操作。

一、顺序表

  1. .h文件

这里的这个结构体元素为指向顺序表(其实就是数组,为了方便理解我后面都叫数组)的指针;记录栈顶元素,栈的大小。

2.创建

首先要先创建这个结构体,并判断是否创建成功。然后这个结构体中的指针指向现在创建的这个数组,数组大小是可以改变的,由函数的实参决定,数组空间的大小就是数组类型的大小乘数组元素的个数。起始在创建完数组后也应该在这里判断是否创建成功,如果创建失败的话,我们也不能直接返回NULL,因为结构体已经创建成功了,所以如果需要返回就需要释放结构体的内存空间。然后栈顶为-1,表示此时栈无元素,最大值为n,但是这里要注意因为top是当做数组下标使用的,所以top最多只能到max-1。

3.入栈

入栈需要判断栈是否创建成功,和栈是否已经满了,这两种情况都不能继续入栈,如果没满,只需要将top向后移,然后以top为下标,填数据即可。pstacl->stack相当于是指向这个数组的指针,这里就是指针的写法。

4.出栈

出栈需要一个变量来记录一下出栈的元素,如果栈不为空,就让top现在指向的这个元素给data,然后top--。因为指针可以直接改变主调函数中变量的内容,所以这里的data用的指针。

5.获得栈顶元素

栈顶元素其实就是top现在指向的元素。

6.获得栈中元素个数

栈中的元素个数就是top+1,因为top是下标,下标是从0开始的,所以算个数时需要+1。

7.销毁

销毁就是直接释放数组的空间和这个结构体的空间。

二、链表

这里着重说一下两种方法的区别,我们知道在创建数组时要指定数组的大小,所以用数组构成的顺序表会有大小限制,并且因为数组的特性(单一性,有序性,连续性)所以我们可以直接用下标访问元素释放的时候也是可以直接释放整数组。而链表没有固定大小的要求,我们是在堆上给链表申请空间的,只要创建了新的节点,然后把他和之前的链表连在一起就没问题,释放的时候也需要一个节点一个节点的释放。

  1. .h文件

这里的结构体和单链表的结构体相同。

2.创建头节点

也就是创建一个单链表的头结点。

3.入栈

就是创建一个节点然后插进链表中,因为栈是先进后出,并且只能在栈顶操作,所以我们如果选择头插,在出栈时也要选择头删。这里入栈的操作和单链表相同。

4.获得栈顶元素

栈顶元素就是首节点。

5.出栈

出栈就是头删,和单链表的头删相同,只需要多一个变量保留出栈元素即可。

6.获得栈的大小

栈的大小就是单链表有效数据的长度。

7.销毁

销毁和单链表的销毁相同。

相关推荐
心仪久了会沦陷24 分钟前
C语言数据结构入门——队列补充:循环队列的数组实现
c语言·开发语言·数据结构·笔记
careathers1 小时前
【数据结构】二叉树拓展
数据结构·算法
m0_547486662 小时前
《数据结构:基于C语言的描述》全套PPT课件2026
c语言·数据结构
垆边人似月.3 小时前
华为题:最多可以参加的会议数目
数据结构·c++·算法
Tongzhi20263 小时前
2026 年考勤行业趋势:考勤正在从“打卡工具“变成“人力成本中枢“
大数据·数据结构·数据仓库·科技·数据库开发
0+11117 小时前
算法 --链表
数据结构·算法·leetcode·链表
夜之眷属20 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
思维新观察20 小时前
三星 Galaxy Tab S12 系列:大屏 AI 平板,兼顾轻薄与生产力
数据结构·人工智能·电脑
杜 硕21 小时前
快速排序详解01
数据结构·算法·排序算法
信奥卷王21 小时前
[GESP202606 六级] 满二叉树
数据结构·算法