• 王道数据结构——栈在括号匹配中的应用


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

    解题思路:

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

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

    代码如下:

    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. */

  • 相关阅读:
    算法竞赛进阶指南 0x52 背包
    cocos2dx查看版本号的方法
    【分析笔记】Linux gpio_wdt.c 看门狗设备驱动源码分析
    iOS 通知扩展插件
    基本数据结构与算法实现JavaAPI【2】-----排序篇
    科技图表AE
    一篇讲解CPU性能指标提取及源码分析
    【C++】String -- 详解
    【C语言】归并排序算法实现
    基于 jasypt 实现spring boot 配置文件脱敏
  • 原文地址:https://blog.csdn.net/UncleJokerly/article/details/126179821