news 2026/6/13 21:26:14

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

作者头像

张小明

前端开发工程师

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 14:36:45

【紧急安全预警】:Dify解密算法已可绕过AES-256加密?真相令人震惊

第一章&#xff1a;【紧急安全预警】&#xff1a;Dify解密算法已可绕过AES-256加密&#xff1f;真相令人震惊近期&#xff0c;网络安全社区中流传一则关于“Dify平台存在可绕过AES-256加密机制”的严重漏洞报告。经多方技术团队交叉验证&#xff0c;该说法部分属实——攻击者在…

作者头像 李华
网站建设 2026/6/13 14:47:10

分布式训练系统设计:AI架构师的流水线并行技术

分布式训练系统设计&#xff1a;AI架构师的流水线并行技术深度解析 一、引言&#xff1a;大模型时代的算力困境与破局之道 1.1 钩子&#xff1a;当模型大到单卡装不下时&#xff0c;我们该怎么办&#xff1f; 2020年&#xff0c;GPT-3以1750亿参数刷新了人类对大模型的认知&…

作者头像 李华
网站建设 2026/6/12 9:24:10

缓存堆积导致延迟飙升?,Dify混合检索清理策略深度解析

第一章&#xff1a;缓存堆积导致延迟飙升&#xff1f;Dify混合检索清理策略深度解析在高并发场景下&#xff0c;缓存系统常因无效数据持续堆积引发响应延迟急剧上升。Dify 框架通过其创新的混合检索与动态清理机制&#xff0c;有效缓解了这一典型性能瓶颈。该策略结合近实时索引…

作者头像 李华
网站建设 2026/6/13 21:09:45

跨语言可视化革命,如何用R和Python打造动态交互图表

第一章&#xff1a;跨语言可视化革命的背景与意义在当今数据驱动的时代&#xff0c;信息的表达方式正经历深刻变革。传统的数据分析工具往往局限于单一编程语言生态&#xff0c;导致开发者在不同技术栈之间迁移时面临重复开发、兼容性差等问题。跨语言可视化技术应运而生&#…

作者头像 李华
网站建设 2026/6/12 21:32:27

Dify重排序参数调优全解析,掌握这7个关键参数让你的检索效率翻倍

第一章&#xff1a;Dify重排序机制核心原理Dify的重排序机制是其在检索增强生成&#xff08;RAG&#xff09;流程中提升结果相关性的关键组件。该机制通过语义层面的深度匹配&#xff0c;对初始检索返回的多个文档片段进行二次排序&#xff0c;确保最相关的内容优先传递给语言模…

作者头像 李华
网站建设 2026/6/12 18:00:11

部署Dify 1.7.0前必须掌握的5个降噪调优技巧(工程师私藏手册)

第一章&#xff1a;Dify 1.7.0音频降噪处理的核心机制Dify 1.7.0在音频处理领域引入了全新的降噪架构&#xff0c;通过深度神经网络与信号增强算法的融合&#xff0c;实现了对复杂噪声环境下的高保真语音还原。该机制不仅支持实时流式处理&#xff0c;还具备自适应学习能力&…

作者头像 李华