数据结构【栈】有哪些应用场景?

news2024/12/22 19:20:09

在这里插入图片描述

✨Blog:🥰不会敲代码的小张:)🥰
🉑推荐专栏:C语言🤪、Cpp😶‍🌫️、数据结构初阶💀
💽座右铭:“記住,每一天都是一個新的開始😁😁😁
💀本章内容:《栈》的介绍✨

前言

本章会介绍栈的特性以及栈的初始化、销毁、插入、删除、取栈顶元素等…

栈的应用场景

那么栈的应用场景有哪些呢?
栈可以达到逆序的功能,利用后进先出的思想。
包括编译器的在对输入的语法进行分析的时候,例如括号的匹配"()“、”{}“、”[]"这些成对出现的符号,借助栈的特性,凡是遇到括号的前半部分,即把这个元素入栈,凡是遇到括号的后半部分就比对栈顶元素是否该元素相匹配,如果匹配,则前半部分出栈,否则就是匹配出错
后续会需要用到栈模拟实现一些知识点,敬请期待。

什么是栈?

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。 它按照后进先出(Last in Firstout)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

在这里插入图片描述

目录

  • 前言
    • 栈的应用场景
      • 什么是栈?
  • 栈的创建
  • 栈的初始化
  • 栈的销毁
  • 插入
  • 删除
  • 判断是否为空
  • 栈的大小
  • 取栈顶元素

栈的创建

静态数组,内存开大了浪费,开小了不够用
这里我们选择用动态数组开辟空间,内存不够扩容

typedef int STDataType;
struct Stack
{
	STDataType* data;
	int top;//栈顶
	int capcity;//内存容量
};

栈的初始化

首先malloc一块空间,最开始栈是空的,所以top为0

void STInit(struct Stack* ps) 
{
	assert(ps);

	ps->data = (STDataType*)malloc(sizeof(STDataType) * 4);
	if (ps->data == NULL)
	{
		perror("malloc fail");
		return;
	}
	ps->capcity = 4;//容量
	ps->top = 0;//当前栈顶
}

栈的销毁

void STDestroy(struct Stack* ps)
{
	assert(ps);

	free(ps->data);
	ps->data = NULL;
	ps->capcity = 0;
	ps->top = 0;
}

插入

首先进来就判断栈顶是否和容量相等,如果相等说明空间满了,需要realloc空间,一般增加capcity二倍的容量

void STPush(struct Stack* ps, STDataType x)
{
	assert(ps);
	//扩容
	if (ps->top == ps->capcity)
	{
		STDataType* tmp = (STDataType*)realloc(ps->data, sizeof(STDataType) * ps->capcity * 2);
		if(tmp == NULL)
		{
			perror("STPush relloc fail");
			return;
		}
		ps->data = tmp;//把新realloc的空间再赋给ps->data
		ps->capcity = ps->capcity * 2;//更新capcity
	}
	ps->data[ps->top] = x;//插入到栈顶
	ps->top++;//栈顶++
}

删除

记得断言栈不能为空
删除没啥好说的,直接–top就行了,如果下次再插入,会覆盖当前栈顶的值

void STPop(struct Stack* ps)
{
	assert(ps);
	assert(!STEmpty(ps));//断言不能为空

	ps->top--;
}

判断是否为空

top为0说明栈里没有元素,为空

bool STEmpty(struct Stack* ps)
{
	assert(ps);
	return ps->top == 0;
}

栈的大小

先断言栈不能为空
直接返回top就是栈的大小

int STSize(struct Stack* ps)
{
	assert(ps);
	assert(!STEmpty(ps));//断言栈不能为空
	return ps->top;

}

取栈顶元素

同样是先断言栈不能为空,如果为空,就没有元素可取
这里top-1才是栈顶的元素

STDataType STTop(struct Stack* ps)
{
	assert(ps);
	assert(!STEmpty(ps));

	return ps->data[ps->top - 1];
}


如果觉得对你有帮助,希望留下你宝贵的三连!感谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/582335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在前端应用中合并多个 Excel 工作簿

本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 | 问题背景 ​ SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据…

Hack The Box - 关卡Dancing

SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居就是靠它实现的。 SMB 是一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的…

干货|7种提高客户推荐率的方法,让你的客户成为你的推广大使!

大家都知道“客户推荐”是一种非常有效的业务推广方式。通过口碑传播,可以吸引更多的潜在客户,建立长期稳定的合作关系。 可以说,这种开发客户的方法:耗时少,成功率高,成本低,客户更好,堪称世界…

山西电力市场日前价格预测【2023-05-30】

日前价格预测 预测明日(2023-05-30)山西电力市场全天平均日前电价为350.71元/MWh。其中,最高日前价格为424.56元/MWh,预计出现在19: 30。最低日前电价为239.37元/MWh,预计出现在13: 00。 以上预测仅供学习参考&#xf…

律师使用ChatGPT 进行法律文献检索提交了错误信息;李开复表示,威力强大的大模型将彻底变革人工智能

🚀 一名律师使用ChatGPT 进行法律文献检索提交了错误信息 近日,一名律师在法庭案件中使用聊天机器人 ChatGPT 进行法律文献检索,结果提交了错误信息, 揭示了人工智能在法律领域的潜在风险,包括误传错误信息。 该事件…

数据分析师的基本职责(合集)

算法工程师的职责表述 算法工程师的职责表述1 职责 1、维护、扩展的大数据处理分析平台; 2、负责将先进的工业大数据分析技术转化为标准化的分析工具与模块; 3、规范并优化算法,提高可靠性; 4、帮助建立标准化的数据分析路线图,能够提取、转换并加强数据…

音视频技术开发周刊 | 295

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 微软炸通Windows与ChatGPT全家桶!人手一个Copilot,AI宇宙降临 三位OpenAI掌舵人亲自撰文:我们应该如何治理超级智能? OpenA…

《Opencv3编程入门》学习笔记—第一章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第一章 邂逅opencv 参考推荐软件版本:visual studio2010 opencv2.4.9 visual studio安装教程: https://blog.csdn.net/qq_45768871/article/details/1081788…

LeetCode链表题(中等)剖析

文章目录 💐文章导读💐1.合并零之间的结点解题思路 💐2.链表中最大孪生和解题思路 💐3.链表的随机节点解题思路 💐4.复杂链表的复制解题思路 💐5.两辆交换两表中的节点解题思路 💐文章导读 &…

【深圳触觉智能技术分享】RK3568 RK809电量计电池调试

本文基于IDO-SBC3568主板介绍说明PMIC RK809电量计的调试方法。 IDO-SBC3568-V1是一款基于RK3568的工控主板,采用22nm先进工艺制程,四核A55 CPU,主频高达2.0GHz,支持高达8GB高速LPDDR4,1T算力NPU ,4K H.26…

如何在Allegro软件中快速复制走线和过孔?

在PCB设计过程中,快速而准确复制走线和过孔是提高设计效率和减少重复工作的关键所在,因此很多工程师会选择使用Allegro来复制走线和过孔,因为Allegro是一款功能强大且灵活的PCB设计软件,提供了多种工具和功能,自然包括…

springboot+java汽车配件销售业绩管理系统 J2EE平台技术

汽车配件销售类企业近年来得到长足发展,在市场份额不断扩大同时,如何更好地管理企业现有销售项目资源成为摆在该类企业面前的重要课题之一。本次打算开发的springboot汽车配件销售业绩管理系统的开发过程引用 J2EE平台技术,该平台中所包含的JDBC、JNDI等组件,规定访问数据库的形…

swagger页面 doc.html出不来,swagger-ui/index.html能出来

swagger页面 doc.html出不来,swagger-ui/index.html能出来。前前后后折腾了很久,jar包冲突,jar包版本,添加路径啥的都弄了,就是出不来。 后来全局搜索“doc.html”页面发现能出来的项目能搜到这个页面: 定…

大数据测试基础概念和工具

下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 大数据已经成为当今的热门话题&#xff0c…

提高客户转介绍率的7个方法,让你的客户成为你的推广大使!

都知道“客户转介绍”,是一种非常有效的商业推广方式。通过客户的口碑传播,我们能够吸引更多潜在客户,并建立起长久稳固的合作关系。 可以说,这种开拓客户的方法:耗时少、成功率高、成本低、客户较优质,称…

掌握Lazada、Shopee店铺运营的黄金法则:测评自养号技巧

在Lazada、Shopee这个东南亚最大的电商平台上,要想成功运营你的店铺并不容易。然而,如果你掌握了以下这些黄金法则,并有效地运用测评自养号的策略,你的店铺就有可能大幅提升销售并在竞争中脱颖而出。 1. 理解你的市场 首先&…

九耶丨阁瑞钛伦特-springmvc(三)

SpringMVC作为一种流行的Java Web框架,是基于Spring之上的。它提供了强大的MVC(Model-View-Controller)架构,能够快速地实现Java Web开发,高效地与数据交互。如何使用SpringMVC成为开发人员的首要问题。要了解SpringMV…

边缘计算盒子都有哪些规格?一文带你了解边缘计算云服务器 ECS

上一次我们详细讲述了,在日常生活中我们能够随时随地看到的“白色盒子”是边缘服务器 ECS,包括边缘服务器 ECS 具体的用途是什么,也为大家逐一进行了科普。 感兴趣的小伙伴欢迎阅读以往文章: 什么是边缘计算盒子?边缘计…

用代码拔高你对整型提升与unsigned,signed的理解

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以…

Linux下通过 rm -f 删除大量文件时报错:Argument list too long

Linux下通过 rm -f 删除大量的小文件时出现类似如下错误信息: -bash: /bin/rm: Argument list too long 如下图所示: 问题原因 如果待删除文件中包含的小文件数量过多,通常是由于受到 shell 参数个数限制所致。 这个是Linux系统存在的限制&…