Leetcode刷题之有效的括号(C语言版)

Leetcode刷题之有效的括号(C语言版)

  • 一、题目描述
  • 二、题目测试用例
  • 三、题目分析
  • 四、完整代码

一、题目描述

20、有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:①、左括号必须用相同类型的右括号闭合。
②、左括号必须以正确的顺序闭合。
③、每个右括号都有一个对应的相同类型的左括号。

二、题目测试用例

在这里插入图片描述

三、题目分析

本题是要将左括号与右括号相匹配的进行闭合,所以我们想到采用“栈”的先进后出特性来进行数据的存放操作。所以我们先要写一个栈出来,包括栈的创建,栈的销毁等许多的基础操作。如果大家忘记了栈的相关操作如何去写,可以看我之前的文章《数据结构——栈的详细介绍》。写好栈之后,我们对于本道题的解题思路便是:
①、左括号入栈

 if(*s=='('||*s=='{'||*s=='['){PushST(&st,*s);}

②、右括号出栈顶元素与其进行比较
这里需要注意的是如果当前只有一个任意的右括号,那么就没有可能出栈与其进行匹配操作,所以在此要对栈进行判空,保证当前栈内存在元素。如果当前栈内没有元素,便要对栈进行销毁操作,以防止内存的泄漏。

 else{//判断栈当前是否为空if(STEmpty(&st)){//注意在此需要防止内存泄漏//销毁栈DestoryST(&st);return false;}//判断匹配问题char top=TopST(&st);//对栈顶元素进行出栈,更新栈顶元素PopST(&st);if((*s==']'&&top!='[')||(*s=='}'&&top!='{')||(*s==')'&&top!='(')){//注意在此需要防止内存泄漏//销毁栈DestoryST(&st);return false;}}

③、返回值

 bool ret=STEmpty(&st);

查看当前栈内是否还存在其他的元素,如果没有则返回true,否则返回false

四、完整代码

//定义数据类型
typedef char STDatatype;typedef struct STack
{STDatatype* a;//数组int capacity;//容量int top;//栈顶元素的下一个
}ST;//初始化
void InitST(ST* pst);
//销毁
void DestoryST(ST* pst);
//压栈
void PushST(ST* pst, STDatatype x);
//出栈
void PopST(ST* pst);
//判空
bool STEmpty(ST* pst);
//获取栈顶元素
STDatatype TopST(ST* pst);
//获取栈的size
int STSize(ST* pst);
//初始化
void InitST(ST* pst)
{assert(pst);pst->a = NULL;pst->capacity = 0;//栈顶元素的下一个位置pst->top = 0;
}
//销毁
void DestoryST(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->capacity = pst->top = 0;
}
//压栈
void PushST(ST* pst, STDatatype x)
{if (pst->top == pst->capacity){int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDatatype *tmp = (STDatatype*)realloc(pst->a, sizeof(STDatatype) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}pst->a = tmp;pst->capacity = newcapacity;}//插入数据pst->a[pst->top] = x;pst->top++;
}
//出栈
void PopST(ST* pst)
{assert(pst);assert(!STEmpty(pst));pst->top--;
}
//判空
bool STEmpty(ST* pst)
{assert(pst);return pst->top == 0;
}
//获取栈顶元素
STDatatype TopST(ST* pst)
{assert(pst);assert(!STEmpty(pst));return pst->a[pst->top-1];
}
//获取栈的size
int STSize(ST* pst)
{assert(pst);return pst->top;
}
bool isValid(char* s) 
{ST st;//初始化InitST(&st);//解题思路:①左括号入栈  ②右括号出栈while(*s){if(*s=='('||*s=='{'||*s=='['){PushST(&st,*s);}else{//判断栈当前是否为空if(STEmpty(&st)){//注意在此需要防止内存泄漏//销毁栈DestoryST(&st);return false;}//判断匹配问题char top=TopST(&st);//对栈顶元素进行出栈,更新栈顶元素PopST(&st);if((*s==']'&&top!='[')||(*s=='}'&&top!='{')||(*s==')'&&top!='(')){//注意在此需要防止内存泄漏//销毁栈DestoryST(&st);return false;}}++s;}bool ret=STEmpty(&st);//销毁栈DestoryST(&st);return ret;
}

在这里插入图片描述

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

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

相关文章

文件上传绕过

1.file_put_contents 路径漏洞 <?phpfunction waf($filename){$black_list array("ph", "htaccess", "ini");$ext pathinfo($filename, PATHINFO_EXTENSION);foreach ($black_list as $value) { //php stristr()函数 语法作用&#xff1a;…

LED Driver数码屏应用解决方案

今天给大家介绍的产品是LED Driver&#xff0c;这属于电源管理类芯片&#xff0c;一般分为恒流驱动与恒压驱动&#xff0c;但是常见的就是恒流驱动&#xff0c;能够保持产品在驱动中提供恒定且稳定的电流。 基本概述 TM1629是一种带键盘扫描接口的LED&#xff08;发光二极管显…

Vellum —— 简介

目录 一&#xff0c;介绍 二&#xff0c;原理 三&#xff0c;PBD算法 一&#xff0c;介绍 Vellum是一个解算模拟框架&#xff0c;使用更高级的PBD&#xff08;XPBD&#xff0c;extended position based dynamics&#xff09;&#xff0c;是2nd Order Integration&#xff08…

Java生成一个区域内的经纬度随机点的方式

准备&#xff1a; 1、四个角点&#xff08;四个点确定一个框&#xff09; 2、想要细分程度 &#xff08;这里说的是经纬度&#xff0c;这里没有对经纬度做更细的区分&#xff09; 如&#xff1a;0.000001约等于0.1m&#xff0c;0.00001约等于1m&#xff0c;0.0001约等于10m 。。…

JavaScript作用域

一、什么是作用域&#xff1f; 作用域指一个变量的作用范围。 每个作用域都是一个独立的地盘&#xff0c;目的就是为了保证当前作用域内的变量不会外泄&#xff0c;且不会和其他作用域中的同名变量冲突。 在JavaScript中的作用域类型 全局作用域函数作用域(局部作用域)块级…

MongoDB——索引(单索引,复合索引,索引创建、使用)

MongoDB索引 官方文档 https://docs.mongodb.com/manual/indexes/#create-an-index 默认索引 _id index Mongodb 在 collection 创建时会默认建立一个基于_id 的唯一性索引作为 document 的 primarykey&#xff0c;这个 index 无法被删除 单个字段索引 单字段索引是 Mongo…

【Skynet 入门实战练习】开发环境搭建 | 运行第一个项目 | debug console 简单使用

文章目录 写在前面开发环境搭建skynet配置文件项目&#xff0c;启动&#xff01; debug console 写在前面 本系列【Skynet 入门实战练习】所有源码同步&#xff1a;https://gitee.com/Cauchy_AQ/skynet_practice 开发环境搭建 skynet skynet 框架地址&#xff1a;https://g…

什么款式的蓝牙耳机跑步不容易掉?推荐几款很不错的运动耳机

​如果你正在寻找一款性能卓越、佩戴舒适的耳机&#xff0c;那么运动耳机绝对是你的不二选择。它们不仅具备出色的音质&#xff0c;还具备防水、防汗、防震等多项特点&#xff0c;让你在运动时更加尽情享受音乐。接下来给大家推荐几款很不错的运动耳机。 1.南卡开放式运动耳机…

cmake 升级

您好&#xff0c;这是Bing。您的问题是如何解决cmake的版本过低的错误。我可以给您一些建议。请看以下的方法&#xff1a; 您可以通过apt命令来卸载当前的cmake版本&#xff0c;然后从官网下载最新的cmake安装包&#xff0c;解压并编译安装。具体的步骤如下1&#xff1a; 检查…

南京数字孪生赋能工业制造,加速推进制造业数字化转型

随着南京信息技术的迅猛发展和工业管理的不断演进&#xff0c;传统的工业管理方式已经无法满足企业对高效、智能和可持续发展的需求。针对这一情况&#xff0c;数字孪生技术应运而生&#xff0c;为南京工业管理带来了全新的变革和机遇。以数字孪生为理念&#xff0c;三维可视化…

闪存基本原理

系列文章目录 一、SSD主控 二、PCIe和NVMe控制器前端子系统 文章目录 系列文章目录三、闪存基本原理1.结构2.衍生问题 三、闪存基本原理 闪存是SSD的存储介质&#xff08;NAND Flash&#xff09;&#xff0c;它是一种非易失性存储器&#xff08;Non-volatile memory&#xff0…

centos7 怎么让命令行显示中文(英文->中文)

要让CentOS 7命令行显示中文&#xff0c;您需要确保您的系统支持中文字符集&#xff0c;并在命令行中设置正确的语言环境。以下是设置中文字符集和语言环境的步骤&#xff1a; 首先&#xff0c;确保您的系统已经安装了中文字体。在终端中运行以下命令来查看安装的中文字体&…

SDN核心技术与内容

NFV(Network Function Virtualization)--网络功能虚拟化 SDN典型架构&#xff1a;应用层、控制层、基础设施层 应用层--不同业务和应用控制层--处理数据平面资源的编排&#xff0c;维护网络拓扑、状态信息基础设施层--数据处理、转发、状态收集 南向接口--控制层与基础设施层接…

开源免费的流程设计器如何选型

大家在开发OA办公自动化、ERP、CRM、BPM、低代码平台等项目的时候&#xff0c;经常用到流程引擎&#xff0c;目前主流的开源流程引擎有activiti、flowable、camunda。这几个开源的流程引擎均基于BPMN2.0国际规范标准&#xff0c;其功能均比较强大&#xff0c;接口也很丰富。但涉…

关键性进展! 小米造车露真容 预计明年上市

大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 小米在各种不同的产品上都在不断打上自己的品牌,这绝对不止于智能手机,而是有智能…

javaScript 内存管理

1 js 内存机制 内存空间&#xff1a;栈内存&#xff08;stack&#xff09;、堆内存&#xff08;heap&#xff09; 栈内存&#xff1a;所有原始数据类型都存储在栈内存中&#xff0c;如果删除一个栈原始数据&#xff0c;遵循先进后出&#xff1b;如下图&#xff1a;a 最先进栈&…

【剪枝】torch-pruning的基本使用

论文&#xff1a;DepGraph: Towards Any Structural Pruning 工程&#xff1a;https://github.com/VainF/Torch-Pruning 算法和库的使用介绍&#xff1a;CVPR 2023 | DepGraph 通用结构化剪枝 1 TP的简介 该算法介绍了DepGraph 如何建模结构化剪枝中的层依赖&#xff0c;实现任…

英国国家量子计算中心与IBM签署重要协议!英国进入实用量子时代

​&#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;英国国家量子计算中心&#xff08;NQCC&#xff09;与IBM达成了一项重要协议。根据该协议&#xff0c;NQCC将为英国研究人员提供IBM量子高级计划的云访问权限&#xff0c;其中包括IBM的量子计算系统舰队。…

一文带你拿下MySQL之增删查改(基础)

✏️✏️✏️今天给各位带来的是关于数据库增删查改基础方面的知识。 清风的CSDN博客 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动你们发财的小手&#xf…

Activiti7工作流引擎:生成实时的流程图片

实时获取当前流程对应的流程图片&#xff0c;并对当前正在审批的节点进行高亮显示。 public class ActivitiController {Autowiredprivate ProcessEngine processEngine;Autowiredprivate RepositoryService repositoryService;Autowiredprivate RuntimeService runtimeService…