码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 王道数据结构——栈在括号匹配中的应用


    判断一个括号序列中左右括号是否匹配

    解题思路:

    扫描到左括号则入栈,扫描到右括号则与栈顶的左括号比较,如果匹配则栈顶括号出栈,不匹配则整个序列不匹配。

    如果最后栈里还有未匹配的左括号则也是匹配失败。

    代码如下:

    1. #include
    2. #include
    3. #define Maxsize 100
    4. typedef struct
    5. {
    6. char data[Maxsize];
    7. int top;
    8. } SqStack;
    9. void InitStack(SqStack &S)
    10. {
    11. S.top=-1;
    12. }
    13. bool StackEmpty(SqStack S)
    14. {
    15. if(S.top==-1) return true;
    16. else return false;
    17. }
    18. bool Push(SqStack &S,char x)
    19. {
    20. if(S.top==Maxsize-1) return false;
    21. S.data[++S.top]=x;
    22. return true;
    23. }
    24. bool Pop(SqStack &S,char &x)
    25. {
    26. if(S.top==-1) return false;
    27. x=S.data[S.top--];
    28. return true;
    29. }
    30. int main()
    31. {
    32. SqStack S;
    33. InitStack(S);
    34. StackEmpty(S);
    35. char str[100];
    36. scanf("%s",str);
    37. // int len;
    38. // len=strlen(str);
    39. // printf("len===%d\n",len);
    40. char x;
    41. int flag=0;
    42. for(int i=0;i<strlen(str);i++)
    43. {
    44. if( str[i]=='(' || str[i]=='[' || str[i]=='{')//如果是左括号就把它入栈
    45. {
    46. Push(S,str[i]);
    47. }
    48. else//如果是右括号
    49. {
    50. if(StackEmpty(S))//当前栈是空的
    51. {
    52. flag=1;
    53. printf("***匹配失败!\n");
    54. break;
    55. }
    56. // printf("当前栈顶元素是:%c\n",S.data[S.top]);
    57. // printf("str[i]==%c\n",str[i]);
    58. if(str[i]==')' && S.data[S.top]=='(')//当前栈顶元素是左小括号并且当前读入的是右小括号
    59. {
    60. Pop(S,x);
    61. //printf("当前出栈的栈顶元素是:%c\n",x);
    62. }
    63. else if(str[i]==']' && S.data[S.top]=='[')//当前栈顶元素是左中括号并且当前读入的是右中括号
    64. {
    65. Pop(S,x);
    66. //printf("当前出栈的栈顶元素是:%c\n",x);
    67. }
    68. else if(str[i]=='}' && S.data[S.top]=='{')//当前栈顶元素是左大括号并且当前读入的是右大括号
    69. {
    70. Pop(S,x);
    71. //printf("当前出栈的栈顶元素是:%c\n",x);
    72. }
    73. else
    74. {
    75. printf("匹配失败!\n");
    76. break;
    77. }
    78. }
    79. }
    80. if(StackEmpty(S) && flag==0)//当前栈是空的
    81. {
    82. printf("匹配成功!\n");
    83. }
    84. return 0;
    85. }
    86. /*
    87. [([][])]{}
    88. [([][]{)]{}
    89. [([][])]{}}
    90. */

  • 相关阅读:
    使用Navicat将服务器的Oracle数据库备份到本地(Windows版本)
    使用AIOps进行更好的事件管理
    由于bug造成truncate table卡住问题
    大语言模型(LLM)综述(二):开发大语言模型的公开可用资源
    (手撕)快速排序 ----->c语言实现 +图解
    mysql 主从同步恢复处理
    【大数据Hive】hive 加载数据常用方案使用详解
    lab1-2 初次遇见加壳程序
    企业如何高效平滑迁移数据?火山引擎DataLeap上线整库搬迁解决方案
    什么是哲学?《哲学家们都干了些什么?》读后感
  • 原文地址:https://blog.csdn.net/UncleJokerly/article/details/126179821
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号