• 数据结构 栈的应用


    题目描述

    请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。

    输入

    有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

    输出

    对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。

    样例输入

    4
    [(d+f)*{}]
    [(2+3))
    ()}
    [4(6]7)9

    样例输出

    yes
    no
    no
    no
    解题思路:
        加入括号一一配对,则()[] {}左右符号一一对应,也就是说在字符串中间必有一左一右括号相连并且两者对应,说先应该去掉除括号以外的其他字符,然后运用栈依次将左括号存入栈中,遇到右括号时间与栈底符号比较,匹配时间栈的标记元素减一。直到最后若栈的标记元素等零,说明栈中的括号一一匹配。
     
    代码
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    typedef struct stu{
    char s[1010];
    int head;
    int tail;
    }st;
    int funz(char s)
    {
    if(s=='(')
    return 1;
    else if(s=='[')
     return 2;
    else if(s=='{')
     return 3;
    else
     return -1;
    }
    int funy(char s)
    {
    if(s==')')
    return 1;
        else if(s==']')
        return 2;
        else if(s=='}')
         return 3;
         else
         return 0;
    }
    int main()
    {
    int i,m,n;
    st s1;
    char s0;
    char s[1010];
    scanf("%d",&m);
    getchar();
    while(m--)
    {
      s1.head=s1.tail=0;
      i=0;
      while(scanf("%c",&s0),s0!=' ')
       if(s0=='('||s0==')'||s0=='['||s0==']'||s0=='{'||s0=='}')
         s[i++]=s0;
         s[i]='';
         if(strlen(s)%2!=0)
         {
          printf("no ");
          continue;
     }
           for(i=0;s[i]!='';i++)
           {
             if(s[i]=='('||s[i]=='['||s[i]=='{')
                s1.s[s1.tail++]=s[i];
             else if(s[i]==')'||s[i]==']'||s[i]=='}')
                 {
                  if(funz(s1.s[s1.tail-1])==funy(s[i]))
                    s1.tail--;
    }
      }
      if(s1.tail==0)
       printf("yes ");
      else
       printf("no ");
    }
    return 0;
    }
  • 相关阅读:
    Rhythmbox中文乱码解决的方法
    苟富贵勿相忘
    C++“窗体”程序设计启蒙
    Java模式(适配器模式)
    sql server 2005 32位+64位、企业版+标准版、CD+DVD 下载地址大全
    STL学习小结
    Spring3.0 AOP 具体解释
    图解iPhone开发新手教程
    已有路由器为何还要交换机
    路由器功能
  • 原文地址:https://www.cnblogs.com/weidongya/p/7219798.html
Copyright © 2020-2023  润新知