码农知识堂 - 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. */

  • 相关阅读:
    软考 系统架构设计师系列知识点之软件架构风格(3)
    重用Playbook
    (九)mmdetection源码解读:训练过程中训练数据的调用DataLoader
    2023-09-20力扣每日一题-水题
    代码随想录算法训练营第五十一天| LeetCode 121 买卖股票的最佳时机、LeetCode 122 买卖股票的最佳时机II
    JMeter性能分析实战一:日常登录接口
    功能自动化测试的策略有哪些?
    C/C++获取文件大小
    正则表达式(Java)
    人工神经网络技术的优点,浅谈人工神经网络
  • 原文地址:https://blog.csdn.net/UncleJokerly/article/details/126179821
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号