数据结构篇3—《龙门客“栈”》

news2024/12/31 4:26:41

在这里插入图片描述

文章目录

  • 🚩前言
    • 1、栈的概念
    • 2、栈的实现框架
    • 3、栈的代码实现
      • 3.1、栈的初始化和销毁
      • 3.2、入栈\出栈\返回栈顶元素\元素个数\判空
      • 3.3、栈定义注意事项
    • 4、栈的应用实例——《括号匹配问题》

🚩前言

前面记录了关于顺序表和链表的数据结构,这一篇文章就来说一下“栈”这一个数据结构。当然不是什么龙门客栈了哈哈。接下来就来实现一下栈这个结构吧,并用实例来展示栈的应用!✌

1、栈的概念

栈 :一种特殊的线性表,在存储数据的时候和顺序表以及单链表有所区别。我们通过图来展示:
在这里插入图片描述

2、栈的实现框架

在这里插入图片描述

3、栈的代码实现

该栈的实现是用顺序表的结构,模拟实现栈。

3.1、栈的初始化和销毁

void STInit(ST* pst)
{
	assert(pst);
	pst->a = NULL;//此处可以给空间,也可以先不给,
	//在插入的时候再给。
	pst->capacity = 0;
	pst->size = 0;
}

void STDestory(ST* pst)
{
	assert(pst);
	free(pst->a);
	pst->a = NULL;
	pst->capacity = 0;
	pst->size = 0;
}

3.2、入栈\出栈\返回栈顶元素\元素个数\判空

void STPush(ST* pst, STDataType data)
{
	assert(pst);
	if (pst->top == pst->capacity)
	{
		int NewCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
		
		STDataType* tmp = 
		(STDataType*)realloc(pst->a,NewCapacity*sizeof(STDataType));
		
		if (tmp == NULL)
		{
			perror("STPush::realloc fail!");
			return;
		}
		else
		{
			pst->a = tmp;
			pst->capacity = NewCapacity;
		}
	}
	pst->a[pst->top++]=data;
}

void STPop(ST* pst)
{
	assert(pst && pst->top > 0);
	pst->top--;
}


STDataType STTop(ST* pst)
{
	assert(pst&&pst->top);
	return pst->a[pst->top - 1];
}

int STSize(ST st)
{
	assert(&st);
	return st.top;
}

bool STEmpty(ST st)
{
	assert(&st);
	return st.top == 0;
}

3.3、栈定义注意事项

①对于top初值的大小:
在这里插入图片描述

4、栈的应用实例——《括号匹配问题》

oj括号匹配问题

思路:
①首先括号匹配需要考虑两个点:数量上匹配和方向上匹配(左括号要匹配右括号)。
②利用栈结构实现该题:只要是左括号(全部类型的),就入栈;如果遇到右括号,则出栈顶元素(也就是和栈顶左括号进行匹配)。在这我们直接判断不匹配是情况,就是只判断不匹配情况,匹配的情况不用管。
代码如下:

bool isValid(char* s) {
    ST st;
    STInit(&st);
    while(*s!='\0')
    {
        if((*s=='(') || (*s=='{') || (*s=='['))
        {
            STPush(&st,*s);
        }
        else
        {
            if(STEmpty(&st))
            {
                return false;
                STDestory(&st);
            }
            DataType ret=GetTopElement(&st);
            STPop(&st);

            if((ret == '(' && *s != ')')
            ||(ret == '{' && *s != '}')
            ||(ret == '[' && *s != ']'))
            {
                return false;
            }
        }
        s++;
    }
    return STEmpty(&st);
   STDestory(&st);
}

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

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

相关文章

2.1.2 C++程序设计——程序基本概念

文章目录 展示大纲1、程序基本概念2、基本数据类型3、程序基本语句4、基本运算5、数学库常用函数6、结构化程序设计展示大纲 1、程序基本概念

数据结构初阶 顺序表的补充

一. 题目的要求 写出三种链表的接口函数 它们的功能分别是 1 查找数的位置 2 在pos位置插入值 3 在pos位置删除值 二. 实现pos 这个其实很简单 找到一步步遍历 找到这个数字就返回 找不到就提示用户下 这个数字不存在 int SLFind(SL* ps,SLDateType x) {assert(ps);int…

C# WinForm —— 21 RichTextBox 使用

1. 加载文件到控件中 加载文件时,要设置文件的路径和类型RichTextBoxStreamType,文件类型包含: RichText 0:富文本格式(RTF)流PlainText 1:纯文本流对象链接和嵌入(OLE&#xff…

根据参考风格进行矢量图绘制

摘要 利用机器学习根据给定的文本描述生成图像的技术已经取得了显著的进步,例如CLIP图像-文本编码器模型的发布;然而,当前的方法缺乏对生成图像风格的艺术控制。我们提出了一种方法,用于为给定的文本描述生成指定风格的绘图&…

DIYGW UniApp可视化工具:低代码时代的前端开发新体验

摘要: 随着技术的不断发展,前端开发领域也迎来了低代码时代的浪潮。本文介绍了DIYGW UniApp可视化工具,这款工具以其傻瓜式、拖拽式、模块化的特性,为前端开发者提供了一个全新的开发体验。通过DIYGW UniApp,用户无需深…

【数据可视化-05】:Plotly数据可视化宝典

一、引言 数据可视化是机器学习流程中不可或缺的一部分。通过图形和图表展示数据,我们可以更直观地理解数据的分布、趋势和关联,从而更有效地进行数据分析、特征工程和模型评估。Plotly是一个功能强大且灵活的数据可视化库,它提供了丰富的图表…

解析C++ 网络输入输出缓冲区Buffer类的设计与实现(muduo库)

网络输入输出缓冲区(Buffer)是为了优化网络通信性能而设计的。通过将数据存储在缓冲区中,可以减少对网络的频繁访问,提高数据传输效率。缓冲区还可以帮助处理数据流中的突发性和短时延,使得数据的发送和接收更加稳定和…

SprintBoot案例-增删改查

黑马程序员JavaWeb开发教程 文章目录 一、准备工作1. 准备数据库表1.1 新建数据库mytlias1.2 新建部门表dept1.3 新建员工表emp 2. 准备一个Springboot工程2.1 新建一个项目 3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类3.1 引入myb…

SC8908电机驱动芯片替代AN41908

SC8908 描述 五路H桥静音驱动电机驱动芯片,闭环直流电机光圈调节,支持霍尔位置检测, 2个步进电机。步进电机驱动带256微步细分。 主要特性 • 步进驱动H桥每路250mA最大驱动电流 • 光圈直流驱动H桥每路150mA最大驱动电流 • 单独…

XX集团IT需求解决方案和实施路线图(54页PPT)

一、资料介绍 文件格式:PPTX,文件为格式转化后文件 源文件格式:PDF 文件页数:54页 关注【数据化运营圈】下载更多数智解决方案 PPT开篇即明确指出了XX集团在信息化建设方面的核心需求,包括提高业务处理效率、优化数…

stack、queue、priority_queue以及仿函数

我们上次对std中的list进行实现,今天我们要实现stack、queue、priority_queue以及仿函数。 目录 stack堆堆的框架构造函数push插入pop删除size()大小empty()判断空top()取栈顶的元素 queue队列队列框架问题: 这里我们为什么用deque? 插入删除取头数据取…

谷歌Google搜索广告开户流程与费用?

谷歌Google作为全球领先的搜索引擎,其广告平台——Google Ads,无疑是企业捕获潜在客户的黄金钥匙。想要在广阔的互联网海洋中精准航行,了解Google搜索广告的开户流程与费用至关重要。通过云衔科技的专业服务,让您的谷歌Google广告…

CST电磁仿真软件远场变更和结果相关【从入门到精通】

1、使用阵列系数计算阵列远场结果 对单一天线进行 仿真分析后,查看反映阵列系数的远场结果! Navigation Tree > Farfields > Selection > Farfield Plot > Array Factor 下面介绍一下,对单一天线进行仿真后,轻松计…

【吃透Java手写】6-Netty-NIO-BIO-简易版

Netty 1 BIO&NIO模型 1.1 BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求&…

暴利 选品大课:选品决定成败,教你多种大爆款选品方法(12节课)

课程目录 001.第一讲:选品决定成败.mp4 002.第二讲:选品也有生辰八字,mp4 003.第三讲:高热度选品底层逻辑,mp4 004,第四讲:高动销选品底层逻辑,mp4 005,第五讲:高点击选品底层逻辑,mp4 006.第六讲:高转化选品底层逻辑.mp4 007.第七讲:低付费选品底层逻辑.mp4 008,第八讲…

运维别卷系列 - 云原生监控平台 之 04.prometheus 查询语句 promql 实践

文章目录 [toc]PromQL 简介什么是时间序列 PromQL 数据类型即时向量 Instant vector范围向量 Range vectorTime DurationsOffset modifier modifier 浮点值 Scalar字符串 String PromQL FUNCTIONSfloor()irate()rate()round()sort()sort_desc() PromQL 运算符算术运算符比较运算…

web安全学习笔记(15)

记一下第25-26课的内容。弱口令爆破的四种模式与判断成功失败的三种方案;爆破中的验证码拦截错误次数IP限制密码加密绕过 IP获取的原理以及绕过CDN获取客户真实IP 一、弱口令的分类 1.常规弱口令:如123456,666666,888888等 2.…

网络安全等级保护在工业控制系统中的应用

工业控制系统(Industrial Control Systems,ICS),是由各种自动化控制组件和实时数据采集、监测的过程控制组件共同构成。其组件包括数据采集与监控系统(SCADA)、分布式控制系统(DCS)、可编程逻辑控制器(PLC)、远程终端(RTU)、智能电子设备(IED),以及确保各…

jspXMl标记语言基础

1.打开命令框进入数据库 打开eclipse创建需要连接的项目 粘贴驱动程序 查看驱动器 使用sql的包 int代表个 conlm代表列名 <%page import"java.sql.ResultSet"%> <%page import"java.sql.Statement"%> <%page import"java.sql.Connect…

Elasticsearch 实现word、pdf、txt、excel文档内容快速检索(保姆级教程)

本文主要讲解ES如何从提取文档中提取内容&#xff08;word、pdf、txt、excel等文件类型&#xff09;&#xff0c;实现快速检索文档内容实现。 特别说明一下&#xff0c;为什么用7.10.0版本&#xff0c;因为在项目中除了精确匹配的要求&#xff0c;也会有模糊查询&#xff08;关…