学习导航
-
- 一、前言
- 二、栈的结构特点
- 三、StackInit接口
- 四、 StackPush()接口
-
- 五、StackPop()接口
-
- 六、StackSize()接口
- 七、StackEmpty()接口
- 八、StackDesttroy()接口
- 九、StackTop()接口
- 十、链表实现与数组实现栈的比较
-
一、前言
文章难度: ★☆☆☆☆
适合对象:C语言玩家 + 栈和队列初学者
知识储备:栈和队列的实现基于顺序表和链表
专栏宣传:算法入门系列长期更新,欢迎点赞收藏,祝大家学有所获。
代码仓库:罅隙/数据结构【完整代码请参见Gitee仓库】
二、栈的结构特点
①基本概要
大家有一个基本的概念即可,在接下的接口实现里,大家会有更深刻的理解。
②栈的数组形式实现
(1)因为我们要动态修改栈空间的大小,所以我们需要定义指针成员
(2)表示栈空间的容量,容量不够时需要扩容
(3)指向栈顶
三、StackInit接口
【作用】:初始化栈
【注意事项】
(1)初始化top时可以指向0也可以指向-1,它们所表示的含义不同。指向0则top则指向栈顶有效元素的下一个,指向-1则表示指向栈顶元素。这里采用top指向0实现。
四、 StackPush()接口
①动图讲解
[作用]:从栈顶压入一个元素。
[动图演示]
②接口详解
【注意事项】
(1)每次压栈即插入元素,首先需要检查栈空间是否满了
(2)我们在初始化的时候由于将capacity初始化为0,所以在进行扩容前需要额外判断检查
(3)插入元素后,top加加指向栈顶元素的下一个
五、StackPop()接口
①动图讲解
【作用】:从栈顶弹出一个元素
【动图演示】:
【注意事项】
1.用数组实现的栈出栈操作非常简单,只需要使得top–,下次push的时候就可以将其覆盖
六、StackSize()接口
【作用】:返回栈中的元素个数
七、StackEmpty()接口
【作用】:判断栈是否为空
八、StackDesttroy()接口
【作用】:销毁栈,释放内存
九、StackTop()接口
【作用】:返回栈顶元素
十、链表实现与数组实现栈的比较
①链表栈图解
1、push相当于头插
2.pop接口相当于头删
②两种方式优缺点比较