news 2026/1/12 17:07:51

数据结构中括号匹配的问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构中括号匹配的问题

1.主要是运用栈这种操作,最基本操作运算,判空,入栈,出栈,对于括号来说,当检测到第一个括号为左括号就压入栈中,如果不是左括号而且栈中没有任何元素说明匹配失败,如果栈定元素是左括号但是和需要匹配的不是同类型的括号说明匹配失败了,如果匹配到最后栈中剩余的还有元素,说明左括号和右括号的数量不相对,肯定有问题,如果一个栈是空的话直接判空函数会返回一个TRUE如果不是空栈会返回flase,可以当作最后返回的值,然后进行判断,特别注意中文的符号和英文的符号不一样,如果len的长度异常就是输入中文了。

2.在进行敲代码的时候应该从主函数开始敲起,敲这敲着感觉自己需要什么了以后再去创建相应的函数,切记一股脑的从上往下直接敲,先大致阅读一边,有一个大局观,然后跟着敲一个边,在脑海里想清楚然后记住,把这个函数删除自己再敲一边化成自己的东西。

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h>//strlen函数头文件 #include<stdbool.h> #define MAXSIZE 100 //最大的容量是100,最多能够检测100个括号的匹配 typedef struct { char data[MAXSIZE];//因为字符是char类型的这里创建的时候就是char,要想明白创建的是什么类型的结构体 int top;//用来栈顶元素的判断 }SeqStack; //初始化 void InitStack(SeqStack* Ps) { Ps->top = -1; } //判断栈是不是为空 bool IsEmpty(SeqStack* Ps) { return Ps->top == -1;//如果等于-1说明是空栈不能出栈,值为真,如果不是空栈值为假为0 } bool Push(SeqStack* Ps, char elem) { if (Ps->top == MAXSIZE - 1) { printf("栈已经满了\n"); return false;//不能进栈了,栈已经满了 } Ps->top += 1;//因为top的值是从-1开始的,添加值是应该从后一个位置开始添加,先增加再赋值 Ps->data[Ps->top] = elem; return true; } bool Pop(SeqStack* Ps, char* elem) { if (Ps->top == -1) { return false; } *elem = Ps->data[Ps->top];//先把值赋值过去,然后再进行减 Ps->top -= 1; return true; } bool BracketCheck(char* str, int len) { SeqStack S;//创建一个变量 InitStack(&S);//然后进行初始化 int i = 0; for (i = 0; i < len; i++) { if (str[i] == '(' || str[i] == '{' || str[i] == '[')//如果这个是左括号就压栈 { Push(&S, str[i]);//压栈的两个操作数,一个是SeqStack*类型,一个是str[i] } else { if (IsEmpty(&S))//判断是不是为空的,这个时候判断是不是左括号的但是数组中没有元素了 { return false; } char TopElem;//顶端元素 Pop(&S, &TopElem);//注意这里是传递地址调用,能改变元素的值 if(((str[i]=='}') && (TopElem!='{')) || ((str[i] == ')') && (TopElem != '(')) || ((str[i] == ']') && (TopElem != '['))) { return false; } } } return IsEmpty(&S); } int main() { char str[MAXSIZE] = { 0 };//注意这个变量是存放数据的,而用结构体创建的是用来进行栈的操作的 printf("请输入你要匹配的括号\n"); scanf("%s", str);//输入括号。特别注意中文的符号和英文的符号不一样,如果len的长度异常就是输入中文了 int len = strlen(str);//求字符串长度 printf("当前匹配的括号数量是%d\n", len);//增加和用户的交互 printf("---------开始判断-------\n"); if (BracketCheck(str, len))//Bracketcheck匹配成功会返回true否则返回flase { printf("匹配成功!\n"); } else { printf("匹配失败!\n"); } return 0; }

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 9:50:21

空间转录组+R语言=发刊利器?5个高分论文常用富集策略首次系统披露

第一章&#xff1a;空间转录组功能富集分析的R语言时代随着空间转录组技术的快速发展&#xff0c;研究者不仅能够获取基因表达数据&#xff0c;还能保留其在组织中的原始空间位置。这一突破性进展对数据分析工具提出了更高要求&#xff0c;而R语言凭借其强大的统计计算与可视化…

作者头像 李华
网站建设 2026/1/11 1:53:51

逆变器DC-AC拓扑全解析:从基础到专用,实战选型指南

在新能源发电、工业驱动、储能系统等领域&#xff0c;逆变器作为“直流转交流”的核心设备&#xff0c;其性能直接决定整个系统的效率、可靠性与成本。而DC-AC拓扑作为逆变器的电路核心&#xff0c;更是技术选型的重中之重。本文将系统梳理逆变器中常用的DC-AC拓扑&#xff0c;…

作者头像 李华
网站建设 2026/1/11 5:00:17

一文讲清楚Spring Bean的生命周期(附详细流程图)

01-什么是Bean的生命周期Spring其实就是一个管理Bean对象的工厂。它负责对象的创建&#xff0c;对象的销毁等。所谓的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程02-为什么要知道Bean的生命周期生命周期的本质&#xff1a;在哪个时间节点上调用了哪个类的哪个…

作者头像 李华
网站建设 2026/1/10 18:13:37

【Dify与Spring AI兼容性深度解析】:掌握版本匹配的5大核心原则

第一章&#xff1a;Dify 与 Spring AI 的版本兼容性概述在构建现代化 AI 驱动的应用程序时&#xff0c;Dify 与 Spring AI 的集成成为关键环节。确保两者版本之间的兼容性&#xff0c;是系统稳定运行的基础前提。不同版本的 Dify 和 Spring AI 可能在 API 接口、数据格式以及认…

作者头像 李华
网站建设 2026/1/10 20:28:15

LobeChat能否支持引力波探测?宇宙事件捕捉与信号解读

LobeChat能否支持引力波探测&#xff1f;宇宙事件捕捉与信号解读 在人类探索宇宙的征途中&#xff0c;2015年LIGO首次直接探测到引力波的消息震惊世界——我们终于“听”到了时空本身的震颤。自那以后&#xff0c;双黑洞并合、中子星碰撞等极端天体事件不再是理论推演中的符号&…

作者头像 李华
网站建设 2025/12/23 19:15:01

基于Next.js的LobeChat为何成为开发者新宠?

基于Next.js的LobeChat为何成为开发者新宠&#xff1f; 在大语言模型&#xff08;LLM&#xff09;席卷全球的浪潮中&#xff0c;一个耐人寻味的现象正在发生&#xff1a;越来越多的开发者不再满足于“调用API写个前端”的简单拼接&#xff0c;而是开始追求更完整、更优雅的AI交…

作者头像 李华