栈的应用(括号匹配)
文章目录核心思想代码实现查考方式方式一手动模拟栈的变化考察“栈内元素”方式二考察“失败”的边界条件三种失败模式方式三算法的时间/空间复杂度核心思想逻辑本质括号匹配是典型的“嵌套结构”。最后出现的左括号必须最先被匹配后进先出。括号具备就近匹配、后进先出的特性后出现的左括号必须先和最近的右括号配对完美契合栈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个空间。用栈实现括号匹配依次扫描所有字符遇到左括号入栈遇到右括号则弹出栈顶元素检查是否匹配。匹配失败的情况①左括号单身②右括号单身③左右括号不匹配

相关新闻

【2018-08-18】浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别

【2018-08-18】浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2018-08-18 | 标题:浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别 | 分…

2026/7/24 10:39:55 阅读更多 →
Intel 13/14代酷睿电压问题解析与BIOS优化指南

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

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

2026/7/21 23:32:07 阅读更多 →
手工焊接贴片芯片全攻略:从工具选择到实战避坑

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

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

2026/7/21 23:32:07 阅读更多 →

最新新闻

深度学习输入层参数随机初始化技术解析

深度学习输入层参数随机初始化技术解析

1. 项目概述:随机生成输入层参数的意义与应用在深度学习模型构建的初始阶段,输入层参数的初始化方式往往决定了模型训练的起点质量。传统固定值初始化方法(如全零初始化)容易导致神经元对称性问题,而Xavier、He初始化等…

2026/7/24 10:41:34 阅读更多 →
Windows环境部署oracle11g

Windows环境部署oracle11g

1.安装Windows2016操作系统。1.1创建虚拟机,分配资源CPU:4核内存:8GB硬盘:200GB1.2挂载ISO,启动安装选择CD/DVD驱动为客户端设备,进入efi引导从本地导入iso镜像,启动时连接此镜像进入DVD启动安装…

2026/7/24 10:41:34 阅读更多 →
CD19 CAR-T相关神经毒性的机制解析与周细胞靶点发现

CD19 CAR-T相关神经毒性的机制解析与周细胞靶点发现

简述: 本文基于CD19靶向CAR-T细胞治疗在B细胞恶性肿瘤中的临床疗效,系统阐述免疫效应细胞相关神经毒性综合征的临床表现与特征,分析表达性失语症作为早期预警信号的临床意义,探讨细胞因子扩散与CAR-T细胞中枢浸润两种病理机制假说…

2026/7/24 10:41:34 阅读更多 →
深度学习参数初始化:原理、实践与优化策略

深度学习参数初始化:原理、实践与优化策略

1. 随机生成输入层参数的核心价值与应用场景在深度学习模型构建的初始阶段,输入层参数的初始化方式往往被初学者忽视。实际上,合理的参数初始化策略能显著影响模型训练的收敛速度和最终性能。随机生成输入层参数作为一种基础但关键的预处理手段&#xff…

2026/7/24 10:41:34 阅读更多 →
DRA75P/DRA74P VIP接口时序配置与IOSET实战指南

DRA75P/DRA74P VIP接口时序配置与IOSET实战指南

1. 项目概述与核心挑战在基于TI DRA75P/DRA74P这类高性能异构处理器的嵌入式系统设计中,视频输入端口(VIP)的配置往往是硬件工程师和驱动开发工程师需要啃下的硬骨头。我处理过不少项目,从行车记录仪到工业视觉检测设备&#xff0…

2026/7/24 10:41:34 阅读更多 →
DS99R421 FPD-Link转高速LVDS串行器:原理、设计与调试全解析

DS99R421 FPD-Link转高速LVDS串行器:原理、设计与调试全解析

1. 项目概述:为什么需要DS99R421这样的接口转换器?在嵌入式显示系统、工业相机或者车载中控屏的设计中,工程师们常常会遇到一个头疼的问题:主控芯片(比如早期的FPGA或某些专用处理器)输出的视频信号是标准的…

2026/7/24 10:40:33 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻