尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

数据结构中括号匹配的问题
📅 发布时间:2026/6/19 1:26:06

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; }

相关新闻

  • 谁才是气象预测王者?,R环境下ARIMA、GLM、Random Forest等5模型PK结果揭晓
  • gandalf 甘道夫ai靶场 wp
  • 部署Dify 1.7.0前必须掌握的5个降噪调优技巧(工程师私藏手册)

最新新闻

  • 深度解析macOS滚动事件拦截:构建专业级定制插件的完整指南
  • 常州多年黄金回收攻略,三十年实体经营,收的顶本地口碑有保障 - 奢侈品回收测评
  • 01_系统架构设计
  • 如何免费实现专业级直播抠像:obs-backgroundremoval插件完全指南
  • 新手必看!抖音保存视频到相册的详细步骤技巧 - 工具软件使用方法推荐
  • LaTeX长表格排版进阶:如何用longtable宏包实现跨页表格的精细控制?

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号