数据结构学习之栈

本文介绍了栈的基本概念,包括其定义、性质以及如何利用数组实现栈。详细阐述了栈的创建、入栈、出栈、判断栈为空、获取栈顶元素、统计栈元素个数和栈的销毁等核心功能。通过实例帮助读者理解栈的后进先出(LIFO)原则及其在编程中的应用。
摘要由CSDN通过智能技术生成

栈的定义与性质

第一个问题:什么是栈?
栈的定义是:
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。

进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。

栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

分解一下就是:
首先是顺序表
只在一个端口进行数据插入和删除,这个端口叫做栈顶
另一个端口叫做栈底

元素的顺序遵循后进先出,先进后出的原则

第二个问题就是
什么是先进后出,什么是后进先出
就和手枪一样,在弹夹中,先压进去的子弹在弹夹的底部,后压入的子弹在弹夹的顶部,在顶部的子弹会先射出来

图解就是这样
在这里插入图片描述
这里是按照顺序入栈的方式,但是我们也可以不用顺序入栈,而是乱序入栈,结果就可能不一样
这个是栈的基本性质,针对这个基本性质,我们就能够实现栈

栈的实现

栈的定义

第一个问题,我们用顺序表还是链表实现?
栈的实现可以使用数组或者链表,但是相对而言数组的尾插是直接用最后一个下标插入就能够实现的,实现代价很小
所以我们使用数组

然后就是如何定义栈的问题
栈有如下特性,一块空间,栈顶部的位置,由于我们要动态使用栈,所以还要有栈空间的大小

struct Stack
{
   
	StackData* a;
	int top;
	int cap;
};

栈的功能

栈有哪些功能?
栈的创建,栈的销毁,入栈,出栈,判断栈为空,统计栈元素个数,获得栈顶元素

栈的创建

栈的创建本质是数组的创建
定义数组默认大小为 4
对空间进行开辟

为何要传地址,因为我们修改的是函数外部的栈,要用地址修改

void StackInit(Stack* qs)
{
   
	//暂时取4个字节大小
	Stackdata* arr = (Stackdata*)malloc(sizeof(Stackdata)*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值