【玩转栈和队列①】栈的C语言实现(动图演绎)

学习导航

    • 一、前言
    • 二、栈的结构特点
    • 三、StackInit接口
    • 四、 StackPush()接口
      • ①动图讲解
      • ②接口详解
    • 五、StackPop()接口
      • ①动图讲解
    • 六、StackSize()接口
    • 七、StackEmpty()接口
    • 八、StackDesttroy()接口
    • 九、StackTop()接口
    • 十、链表实现与数组实现栈的比较
      • ①链表栈图解
      • ②两种方式优缺点比较

一、前言

‍文章难度: ★☆☆☆☆
‍适合对象:C语言玩家 + 栈和队列初学者
‍知识储备:栈和队列的实现基于顺序表和链表
‍专栏宣传:算法入门系列长期更新,欢迎点赞收藏,祝大家学有所获。
‍代码仓库:罅隙/数据结构【完整代码请参见Gitee仓库】

二、栈的结构特点

①基本概要
【玩转栈和队列①】栈的C语言实现(动图演绎)_第1张图片
大家有一个基本的概念即可,在接下的接口实现里,大家会有更深刻的理解。
②栈的数组形式实现
【玩转栈和队列①】栈的C语言实现(动图演绎)_第2张图片
(1)因为我们要动态修改栈空间的大小,所以我们需要定义指针成员
(2)表示栈空间的容量,容量不够时需要扩容
(3)指向栈顶

三、StackInit接口

【作用】:初始化栈【玩转栈和队列①】栈的C语言实现(动图演绎)_第3张图片
【注意事项】
(1)初始化top时可以指向0也可以指向-1,它们所表示的含义不同。指向0则top则指向栈顶有效元素的下一个,指向-1则表示指向栈顶元素。这里采用top指向0实现。

四、 StackPush()接口

①动图讲解

[作用]:从栈顶压入一个元素。
[动图演示]
【玩转栈和队列①】栈的C语言实现(动图演绎)_第4张图片

②接口详解

【玩转栈和队列①】栈的C语言实现(动图演绎)_第5张图片
【注意事项】
(1)每次压栈即插入元素,首先需要检查栈空间是否满了
(2)我们在初始化的时候由于将capacity初始化为0,所以在进行扩容前需要额外判断检查
(3)插入元素后,top加加指向栈顶元素的下一个

五、StackPop()接口

①动图讲解

【作用】:从栈顶弹出一个元素
【动图演示】【玩转栈和队列①】栈的C语言实现(动图演绎)_第6张图片

【玩转栈和队列①】栈的C语言实现(动图演绎)_第7张图片
【注意事项】
1.用数组实现的栈出栈操作非常简单,只需要使得top–,下次push的时候就可以将其覆盖

六、StackSize()接口

【作用】:返回栈中的元素个数
【玩转栈和队列①】栈的C语言实现(动图演绎)_第8张图片

七、StackEmpty()接口

【作用】:判断栈是否为空
【玩转栈和队列①】栈的C语言实现(动图演绎)_第9张图片

八、StackDesttroy()接口

【作用】:销毁栈,释放内存
【玩转栈和队列①】栈的C语言实现(动图演绎)_第10张图片

九、StackTop()接口

【作用】:返回栈顶元素
【玩转栈和队列①】栈的C语言实现(动图演绎)_第11张图片

十、链表实现与数组实现栈的比较

①链表栈图解

1、push相当于头插
【玩转栈和队列①】栈的C语言实现(动图演绎)_第12张图片
2.pop接口相当于头删
【玩转栈和队列①】栈的C语言实现(动图演绎)_第13张图片

②两种方式优缺点比较

【玩转栈和队列①】栈的C语言实现(动图演绎)_第14张图片

你可能感兴趣的:(【数据结构❃启航篇】,C,栈,数据结构)