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

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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版