当前位置: 首页 > news >正文

唤起“栈”的回忆

今夜闻雨来,闲敲博客落灯花!

目录

栈的概念和结构:

栈的创建和初始化:

入栈:

出栈:

栈的销毁:

结语:


栈的概念和结构:

简单来说,栈是一种特殊的顺序表,分为栈顶(top)和栈底,进入数据插入和删除发生在栈顶,了解栈的时候,我们经常会听到压栈和出栈两个词

压栈:栈的插入的插入操作,入数据在栈顶;

出栈:栈的删除操作,出数据也在栈顶;

当我们讨论它的结构时,它属于后进先出,如下图:

栈的创建和初始化:

我们按之前一样,我们先定义一个结构体,结构体包括动态数组,栈顶和容量

typedef int STDataType;
typedef struct Stack
{
	STDataType* a;//动态数组
	int top;//栈顶
	int capacity;//容量
}Stack;
void StackInit(Stack* ps)
{
	assert(ps);
	ps->a = (STDataType*)malloc(sizeof(STDataType) * 4);//初始化4个空间
	ps->top = 0;//无元素
	ps->capacity = 4;
}

入栈:

先检查容量是否已满,不满,则增容,加入元素时,是在栈顶加入的,所以我们只需改变栈顶即可

void StackPush(Stack* ps, STDataType x)
{
	assert(ps);
	if (ps->capacity == ps->top)//检查容量
	{
		STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * ps->capacity * 2);
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		ps->a = tmp;
		ps->capacity *= 2;//扩容
	}
	ps->a[ps->top] = x;//存入栈顶
	ps->top++;//将栈顶上移
}

出栈:

先检测是否为空,如果不为空,我们只需将其变为有效个数,即可了

bool StackEmpty(Stack* ps)
{
	assert(ps);
	return ps->top == 0;
}
void StackPop(Stack* ps)
{
	assert(ps);
	assert(!StackEmpty(ps));//检测栈是否为空
	ps->top--;//将栈下移
}

栈的销毁:

将开辟的空间释放掉,同时将其他变量置为0

void StackDestroy(Stack* ps)
{
	assert(ps);
	free(ps->a);//释放掉a开辟的空间
	ps->a = NULL;
	ps->top = 0;//置为0
	ps->capacity = 0;
}

结语:

谢谢观看!

相关文章:

  • 【数据结构】栈与队列:基础 + 竞赛高频算法实操(含代码实现)
  • Web测试
  • 神聖的綫性代數速成例題7. 逆矩陣的性質、逆矩陣的求法
  • 深度学习-yolo实战项目【分类、目标检测、实例分割】?如何创建自己的数据集?如何对数据进行标注?没有GPU怎么办呢?
  • 计算机网络基础:网络配置与管理
  • ImGui 学习笔记(五) —— 字体文件加载问题
  • Redis集群扩容实战指南:从原理到生产环境最佳实践
  • DICOM医学影像数据加密技术应用的重要性及其实现方法详解
  • 优选算法的匠心之艺:二分查找专题(二)
  • 双模型协作机制的deepseek图片识别
  • Linux错误(2)程序触发SIGBUS信号分析
  • CTF类题目复现总结-真的很杂 1
  • Spring Boot 集成 Lua 脚本:实现高效业务逻辑处理
  • 【小项目】四连杆机构的Python运动学求解和MATLAB图形仿真
  • Elasticsearch:为推理端点配置分块设置
  • 【微服务】SpringBoot整合LangChain4j 操作AI大模型实战详解
  • Qt SQL-1
  • 基于MapReduce的气候数据分析
  • [JAVASE] 反射
  • USB转多路串口项目资料汇总
  • 新城市志|GDP万亿城市,一季度如何挑大梁
  • 法律顾问被控配合他人诈骗酒店资产一审判8年,二审辩称无罪
  • 一条铺过11年时光的科学红毯,丈量上海科创的“长宽高”
  • 白玉兰奖征片综述丨海外剧创作趋势观察:跨界·融变·共生
  • 烤肉店从泔水桶内捞出肉串再烤?西安未央区市监局:停业整顿
  • 中国情怀:时代记录与家国镜相|澎湃·镜相第三届非虚构写作大赛暨七猫第六届百万奖金现实题材征文大赛征稿启事