你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C语言栈——图文解析

[复制链接]
gaosmile 发布时间:2020-9-6 21:07
栈的介绍


栈(stack),是一种线性存储结构,它有以下几个特点:
  • 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
  • 向栈中添加/删除数据时,只能从栈顶进行操作。


栈通常包括的三种操作:push、peek、pop。
  • push——向栈中添加元素。
  • peek——返回栈顶元素。
  • pop——返回并删除栈顶元素的操作。


1. 栈的示意图

微信图片_20200906205907.jpg

栈中的数据依次是30→20→10。

2. 出栈

微信图片_20200906205913.jpg

出栈前:栈顶元素是30。此时,栈中的元素依次是30→20→10。

出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是20→10。

3. 入栈

微信图片_20200906205919.jpg

入栈前:栈顶元素是20。此时,栈中的元素依次是20→10。

入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40→20→10。


栈的C实现


1数组实现的栈,并且只能存储int数据

实现代码:

微信图片_20200906205925.jpg

运行结果:

  1. tmp=30
  2. tmp=20
  3. stack size()=3
  4. 40
  5. 20
  6. 10
复制代码

    结果说明:该示例中的栈,是通过"数组"来实现的!



由于代码中已经给出了详细了注释,这里就不再对函数进行说明了。仅对主函数main的逻辑进行简单介绍:
  • 在主函数main中,先将 "10, 20, 30"依次压入栈。此时,栈的数据是:30→20→10。
  • 接着通过pop()返回栈顶元素;pop()操作并不会改变栈中的数据。此时,栈的数据依然是:30→20→10。
  • 接着通过peek()返回并删除栈顶元素。peek操作之后,栈的数据是:20→10。接着通过push(40)将40压
  • 入栈中。push(40)操作之后,栈的数据是:40→20→10。


2单向链表实现的栈,并且只能存储int数据

实现代码:

微信图片_20200906205931.jpg

代码说明:"运行结果" 以及 "主函数main的逻辑"都和"C语言实现一"的一样。不同的是,该示例中的栈是通过单向链表实现的。

3双向链表实现的栈,并且只能存储int数据

实现代码:

(1)双向链表的头文件(double_link.h)

微信图片_20200906205936.jpg

(2)双向链表的实现文件double_link.c)

微信图片_20200906205942.jpg
微信图片_20200906205948.jpg
微信图片_20200906205955.jpg

(3)双向链表的测试程序(dlink_stack.c)

微信图片_20200906210002.jpg

代码说明:"运行结果" 以及 "主函数main的逻辑"都和前两个示例的一样。不同的是,该示例中的栈是通过双向链表实现的。

4双向链表实现的栈,能存储任意类型的数据

实现代码:

(1)双向链表的头文件(double_link.h)

微信图片_20200906210008.jpg

(2)双向链表的实现文件(double_link.c)

微信图片_20200906210016.jpg
微信图片_20200906210037.jpg
微信图片_20200906210024.jpg
微信图片_20200906210031.jpg

(3)双向链表的测试程序(dlink_stack.c)

微信图片_20200906210043.jpg

运行结果:

  1. id=40, name=dan
  2. id=20, name=jody
  3. id=10, name=sky
复制代码


结果说明:该示例中的栈是通过双向链表实现的,并且能存储任意类型的数据。示例中是以结构体类型的数据进行演示的,由于代码中已经给出了详细的注释,这里就不再介绍了。

收藏 1 评论0 发布时间:2020-9-6 21:07

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版