自学嵌入式第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.销毁

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

相关推荐
m0_5474866610 小时前
《数据结构教程》全套 PPT课件2026
数据结构
tryxr16 小时前
矩阵的几种基础变换
java·数据结构·算法·矩阵
mmmmath_316 小时前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
All for pursuit.16 小时前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
All for pursuit.17 小时前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
渡我白衣17 小时前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
晴天的雨.99220 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
淡海水1 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1011 天前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2401_839080541 天前
C++常见八股
数据结构·c++·算法