zoukankan      html  css  js  c++  java
  • 栈的运用(3)

    问题描述:

     试写一个判别表达式中开,闭括号是否配对出现的算法

    问题分析:

    这道题很简单,表达式存入数组中,判断,开,闭括号的个数相等,但是也要注意顺序,你不能出现这样的情况(【)】这个就不是正确的表达式了,也就是说两个匹配的操作符之间不能有其他的操作符。想到昨天做的简答题,把运算符入栈再去判断。

    Int main()

    {

      Stack s;

      initStack s;

     Char buffer[30];

      Int i;

      Char x,y;

      Scanf(%s,buffer);

      While(buffer[i])

      {

        If(buffer[i]==(||buffer[i]==[||buffer[i]==)||buffer[i]==])

         Push(s,buffer[i]);

         I++;

     }

     While(!stackempty(s))//怎样使栈后移,还是遇到坎了。所以这里的思路出现问题。。

    (是还没有很理解,出栈的算法和判断栈为空的算法把,理解了,就明白,怎样用了,现在了解了点)

    {

       Pop(s,x);

    if(x=()

     {

      Pop(s,y);

      If(y==))

      Printf(“”)

    }

     

    书上的算法:

    BOOL BracketCorrespondency(char  a[])

    {

      Int i=0;

      Stack s;

      InitStack(s);

      ElemType x;

      While(a[i]){

            Switch(a[i]){

            Case (:

             Push(s, a[i]);

             Break;

            Case [:

             Push(s, a[i]);

             Break;

            Case )

              GetTop(s, x);

              If(x==()  

                Pop(s,x);

              Else return false;

              Break;

            Case ]:

               GetTop(s,x);

                If(x==[)

                Pop(s,x);

                Else return false;

                Break;

            Default:

                Break;

           }

        I++;

    }

    If(s.size!=0)

       Return false;

    Return true;

    }

    这个算法很好地解决了这个运算符匹配的问题。

  • 相关阅读:
    python入门(变量命名规则)
    基础数据类型(不可变数据类型)
    记录Linux下安装elasticSearch时遇到的一些错误
    利用谷歌 kaptcha 进行验证码生成
    分布式拒绝服务攻击
    python3.5文档
    python反射机制
    tornado 使用tornado让你的请求异步非阻塞
    tornado的入门教程
    spark 环境变量系列配置
  • 原文地址:https://www.cnblogs.com/wj204/p/3044349.html
Copyright © 2011-2022 走看看