栈和队列——c语言实现栈

本节复习栈和队列中栈的增删查改。 

首先回顾一下栈的性质: 栈的存储数据的原则是“后入先出”, 先入的在栈底; 后入的在栈顶。,弹出数据时在栈顶弹出。

目录

准备文件

创建栈的结构体蓝图

栈的初始化 

入栈

 出栈

获取栈顶元素

 获取栈中有效元素的个数

检测栈是否为空 

销毁栈 


准备文件

先准备三个文件, 一个main.c, 一个.h文件用于声明函数接口, 还有一个.c文件用于实现函数接口

 ---------------------------------------------------------------------------------------------------------------------------------------

创建栈的结构体蓝图

首先包含一下头文件。重定义一下要保存的数据类型。 这样做是为了后续便于维护我们的栈。

然后再创建栈的结构体。 栈的结构体成员有三个, 一个指向动态开辟内存的指针(动态栈,更优)。第一个是栈的数据个数, 我们用top来表示。 第三个就是栈的总容量, 这个总容量不是固定的, 动态栈在后续空间不够还会开辟新的空间。 

 ---------------------------------------------------------------------------------------------------------------------------------------

栈的初始化 

创建好栈后第一步就是将栈进行初始化。

.h函数声明

.c函数实现

 --------------------------------------------------------------------------------------------------------------------------------------- 

入栈

入栈时要确保栈有空间, 如果没有空间, 那么就需要开辟空间, 一般我们扩容的原则和顺序表示一样的。 就是扩容位原来的二倍大小的空间。

.h函数声明

.c函数实现

 ---------------------------------------------------------------------------------------------------------------------------------------

 出栈

出栈要确保栈中有元素, 并且注意出栈元素应该为最后入栈的那个元素, 也就是data中下表为top - 1的元素。 出栈并不是要将top - 1处的元素拿走,而是让top 减去1, 对于栈来说, top 减去1, 就意味着少了一个元素。 这个元素就是栈顶的元素。 

.h函数声明:

.c函数实现:

 ---------------------------------------------------------------------------------------------------------------------------------------

获取栈顶元素

栈顶元素就是top - 1位置的元素。 

.h函数声明

.c函数实现

 ---------------------------------------------------------------------------------------------------------------------------------------

 获取栈中有效元素的个数

栈的元素个数其实就是top的大小, 但是c语言推荐使用函数来获取栈的元素个数。 

.h函数声明

 .c函数实现

 ---------------------------------------------------------------------------------------------------------------------------------------

检测栈是否为空 

top == 0的时候,栈就是空的。

这里忘记包含bool函数的头文件了。 包含一下头文件。

.h函数声明

.c函数实现

 ---------------------------------------------------------------------------------------------------------------------------------------

销毁栈 

销毁栈的意思是销毁栈的data所指向的动态开辟的空间。 而不是销毁我们用结构体定义的栈的这个变量本身。 这个变量本身只是一个在栈帧空间开辟出来的结构体变量。 只有在堆区用动态开辟开辟出来的内存才需要销毁

.h函数声明

.c函数实现

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值