发布时间:2026/7/21 23:32:14
栈的应用(括号匹配) 文章目录核心思想代码实现查考方式方式一手动模拟栈的变化考察“栈内元素”方式二考察“失败”的边界条件三种失败模式方式三算法的时间/空间复杂度核心思想逻辑本质括号匹配是典型的“嵌套结构”。最后出现的左括号必须最先被匹配后进先出。括号具备就近匹配、后进先出的特性后出现的左括号必须先和最近的右括号配对完美契合栈LIFO规则。遇到左括号压入栈底等待匹配。遇到右括号检查栈顶。如果栈顶是对应的左括号则弹出匹配成功否则匹配失败。遍历结束如果栈为空则全部匹配如果栈不为空说明有左括号多余。代码实现#includestdio.h#includestdbool.h#includestring.h#defineMaxSize10// 定义栈中最大元素的个数 若存满了 可使用 链栈typedefstruct{chardata[MaxSize];// 静态数组存放栈中元素inttop;// 栈顶指针指向栈顶元素初始为-1}SqStack;// 基础操作// 考试中可直接使用基本操作建议简要说明接口作用// 1.初始化栈 初始化空栈指针指向数组下标 -1无效位置voidInitStack(SqStackS){S.top-1;// 空栈标志}// 2.判断栈是否为空 判断栈是否为空top 是否为 -1boolStackEmpty(SqStack S){returnS.top-1;}// 3.新元素入栈 入栈先移指针top再放元素boolPush(SqStackS,charx){if(StackFull(S))returnfalse;// 栈满报错S.data[S.top]x;// 先移指针再存数据returntrue;}// 4.栈顶元素出栈用 x 返回 出栈先取元素再移指针top--boolPop(SqStackS,charx){if(StackEmpty(S))returnfalse;// 栈空报错xS.data[S.top--];// 先取数据再移指针returntrue;}// 核心逻辑函数boolbracketCheck(charstr[],intlength){SqStack S;InitStack(S);// 初始化栈for(inti0;ilength;i){// 1. 遇到左括号入栈if(str[i](||str[i][||str[i]{){Push(S,str[i]);// 扫描到左括号入栈}else{// 2. 遇到右括号进行匹配检查if(str[i])||str[i]]||str[i]}){// 【考点】如果栈为空说明右括号单身匹配失败if(StackEmpty(S)){returnfalse;// 右括号单身匹配失败}chartopElem;Pop(S,topElem);// 弹出栈顶左括号 栈顶元素出栈// 检查弹出的左括号是否与当前右括号匹配if(str[i])topElem!()returnfalse;if(str[i]]topElem![)returnfalse;if(str[i]}topElem!{)returnfalse;}}// 3. 忽略其他非括号字符}// 【考点】遍历结束后栈非空说明左括号多了returnStackEmpty(S);// 检索完全部括号后栈空说明匹配成功}查考方式方式一手动模拟栈的变化考察“栈内元素”形式给出一个括号序列问“栈中元素个数最多的时候是多少”或“某一时刻栈底的元素是什么”实战演示序列{ [ ( ) ] } ( )扫描字符操作栈内元素栈底→栈顶备注{入栈{栈底[入栈{ [(入栈{ [ (此时栈内元素最多3个)匹配 ({ [弹出 (]匹配 [{弹出 [}匹配 {空弹出 {(入栈()匹配 (空弹出 (答案最多时有3个元素栈底始终是{。方式二考察“失败”的边界条件三种失败模式(选择题)算法会在以下三种情况返回false三种失败对应代码行通俗记忆①左括号单身return StackEmpty(S);返回 false“左剩了” —— 遍历完栈底还有存货②右括号单身if (StackEmpty(S))return false;“右多了” —— 刚来右括号栈却空了③左右不匹配if (topElem ! ...)return false;“穿错鞋” —— 栈顶是圆括号却来了方括号方式三算法的时间/空间复杂度时间复杂度O(n)只需遍历一次字符串每个元素入栈/出栈一次。空间复杂度O(n)最坏情况下全是左括号栈需要n个空间。用栈实现括号匹配依次扫描所有字符遇到左括号入栈遇到右括号则弹出栈顶元素检查是否匹配。匹配失败的情况①左括号单身②右括号单身③左右括号不匹配

相关新闻

2026/7/21 23:32:14

Intel 13/14代酷睿电压问题解析与BIOS优化指南

1. Intel 13/14代酷睿"缩缸"事件始末2023年下半年开始,大量用户反馈搭载Intel第13代(Raptor Lake)和第14代(Raptor Lake Refresh)酷睿处理器的系统出现稳定性问题。主要表现为:高负载场景下&…

2026/7/21 23:32:14

手工焊接贴片芯片全攻略:从工具选择到实战避坑

最近在电子设计课程中,很多同学第一次接触PCB焊接,尤其是焊接STM32、51单片机这类核心芯片时,常常会遇到令人哭笑不得的状况。比如,本想焊出一个整洁的最小系统板,结果焊盘上的锡球堆得比芯片本体还大,一上…

2026/7/22 1:53:17

MCP与FC协议对比:微服务与Serverless通信技术解析

1. 从面试题看技术选型本质这道来自阿里的面试题看似在比较两种技术协议,实则考察的是候选人对分布式系统通信范式的深度理解。我在2018年第一次接触Harness平台时,也曾被MCP和FC的概念困扰——它们都出现在服务调用的上下文里,但设计哲学却截…

2026/7/22 1:53:17

Unity集成WebP插件实战:优化移动端图片资源与内存管理

1. 项目概述:为什么Unity开发者需要关注WebP?如果你在Unity项目里处理过大量图片资源,尤其是针对移动平台,那你一定对包体大小和内存占用这两个“老大难”问题深有体会。一张1024x1024的PNG贴图,轻松就能吃掉好几兆的磁…

2026/7/22 1:53:17

M4Markets:“退休组合风险集中显现”

雅虎财经报道,IBM股价在7月14日单日下跌约25%,创下公司历史上极为罕见的跌幅,长期依赖单一蓝筹股收息的退休投资者因此承受冲击,平台认为,这暴露了集中持仓在提款阶段的真实风险。报道称,IBM一季度调整后每…

2026/7/22 1:48:17

基于Opencode开发的博客系统

免费的开源项目,有国外国内免费提供的大模型,这个项目就是用免费大模型30分钟跑出来的,大家可以试试 项目地址:https://gitee.com/laughing-foolishly-loud/jiyuopencodekaifadebokexitong.git

2026/7/20 6:33:00

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/22 0:02:17

抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具

抓包代理链路下的 TLS 指纹变化分析:为什么调试环境会影响访问结果 摘要 在网页调试、接口联调、自动化巡检和授权采集排查中,抓包是常见手段。但很多开发者会遇到一个现象:正常访问页面时没有问题,一进入抓包或代理调试环境&…

2026/7/22 0:02:17

微信QQ聊天记录误删恢复与备份方案全指南

1. 聊天记录误删的常见场景与恢复思路作为一名长期关注数据安全的技术博主,我处理过上百起聊天记录误删的求助案例。手机误操作、系统升级失败、设备损坏是三大常见诱因。上周就遇到用户更新微信时断电,导致近两年的工作群聊记录全部消失的极端案例。不同…

2026/7/22 0:02:17

2026最新8款个人AI编程免费工具深度实测

作为一名全栈独立开发者,我最近半年一直在折腾副业项目,每个月在AI编程工具上的订阅费算下来其实也不算便宜。作为个人开发者,我们追求的就是用最少的成本获得最高效的开发体验。TRAE 基础版免费,字节跳动出品的国内首款 AI 原生 …

2026/7/21 20:02:44

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…