文章目录
1. 栈的定义和基本操作
1.1 栈的定义
- 栈(Stack):是只允许在一端进行插入或删除操作的线性表。也就是栈是一种特殊的线性表。
- 栈的特点:后进先出LIFO(last in first out)
- 栈的一些相关名词:栈顶、栈底、空栈。
1.2 栈的基本操作
1.3 栈的分类
* 物理结构的不同使得栈的种类不同
1. 顺序结构
1. 静态顺序栈
2. 动态顺序栈
2. 链式结构
1. 静态链栈
2. 动态链栈
1.4 栈的两种实现
- 栈顶指针指向栈顶元素。
- 栈顶指针指向栈顶元素的下一个位置。
一般top指向当前栈顶元素的实现方式更常见。
注意:这两种方式在进行增、删、查的时候,操作也不一样。注意是
++top
还是top++
的问题。
1.5 小结
2. 静态顺序栈
2.1 基本操作
2.1.1 初始化操作以及判断栈是否为空
注意:由于使用的是静态数组,所以,销毁栈的操作不需要我们手动进行销毁,交给程序销毁。
2.1.2 进栈操作
2.1.3 出栈操作
2.1.4 读取栈顶元素
2.2 共享栈
共享栈就是两个栈共用同一块内存空间,这块空间的两端分别是两个栈的栈底,如下图所示:
2.3 小结
3. 动态链栈
3.1 基本操作
3.1.1 初始化操作
和链表的定义一模一样,实际上,链栈就是限制链表只能在一头进行增加和删除元素。通常,我们取头部的那一端,也就是在头节点的后面进行添加和删除操作,这样就形成了链栈。
3.1.2 往链栈顶添加元素
实际上,链栈就是限制链表只能在一头进行增加和删除元素。通常,我们取头部的那一端,也就是在头节点的后面进行添加和删除操作,这样就形成了链栈。
代码描述如下:
注意:这里链栈的举例使用的是带头结点。
3.1.3 链栈顶弹出元素
链栈弹出顶部元素过程图:
代码描述:
3.1.4 查看栈顶元素
3.2 两种实现方式
一种是带头结点,一种是不带头结点:
我们知道链表一般带头节点,是为了在头指针后面添加或删除元素与其他位置统一。但是,在链栈中,不会在其他地方插入或删除元素,所以,我们一般采用不带头结点的方式去实现链栈,这样删除、添加操作更加简单,并且更加节省空间。
3.3 小结
4. 栈的代码实现(C语言)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84620.html