算法设计-利用栈判别表达式中的括弧是否配对

标签: 利用栈判别表达式中的括弧是否配对
7人阅读 评论(0) 收藏 举报
分类:

假设一个算术表达式中包括()、[]、{}三种类型的括弧,编写一个判别表达式中括弧是否正确配对的函数correct(exp,tag);

其中:exp为字符串类型的变量(可理解为每个字符占用一个数组元素),表示被判别的表示式。

         tag为布尔型变量。

思路:用栈st进行判定,遇到(、[、{时入栈,当遇到)、]、}时,检查当前栈顶元素是否是对应的(、[、{,若是则退栈,否则返回表示不配对。当整个算术表达式检查完毕时,若栈空则表示括弧正确配对,否则不匹配。

伪代码:

        #define m0 100         //m0为字符串中最大字符个数

        char exp[m0];

        int tag;

        bool correct(exp,tag)

        {    char st[m0];

             int top=0,i=1;

             tag=1;

             while(i<=m0&&tag){            

                      if(exp[i]=='('||exp[i]=='['||exp[i]=='{') {top++;    st[top]=exp[i];}     //遇到(、[、{入栈

                      if(exp[i]==')') {if(st[top]=='(')top--; else tag=0; }     //遇到')',若栈顶是'(',则继续处理,否则返回不匹配

                      if(exp[i]==']') {if(st[top]==']')top--; else tag=0; }     //遇到']',若栈顶是'[',则继续处理,否则返回不匹配

                      if(exp[i]=='}') {if(st[top]=='}')top--; else tag=0; }     //遇到'}',若栈顶是'{',则继续处理,否则返回不匹配

                      i++;

              }//while

             if(top>0) tag=0;                          //若栈不空,则不匹配

             if(tag=1)return TURE;                  //若tag=1,则表示匹配,否则返回不匹配

             else return FALSE;

        }//correct



示例2:

bool Matching(char exp[]){

int state=1;

ch=*exp++;

while(ch!=’#’&&state){

switch (ch){

case “(”:Push(S,ch);break;

case ”)”:{

if(!StackEmpty(S)&&GetTop(S)=’(’)

Pop(S,e);

else state=0;break;

}

}//switch

ch=*exp++;

}//while

if(state&&StackEmpty(S)) return TURE;

else return FALSE;

}//Matching



查看评论

【Python全栈】第五周 Python Web项目开发实现(上)

-
  • 1970年01月01日 08:00

使用栈判断输入的表达式中括号是否配对

import java.util.Scanner;class LStack { class Node { char data; Node next; ...
  • tianzeyu1992
  • tianzeyu1992
  • 2015-11-10 15:14:38
  • 431

设计一个算法采用顺序栈判断表达式中的括号是否正确配对

  • 2012年11月29日 19:16
  • 2KB
  • 下载

“顺序栈”判断表达式中的括号是否正确配对

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:date.cpp * 作 者:单昕昕 ...
  • MIKASA3
  • MIKASA3
  • 2016-03-31 20:32:56
  • 2148

“链栈”判断表达式中的括号是否正确配对

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:d...
  • MIKASA3
  • MIKASA3
  • 2016-03-31 20:25:35
  • 874

判别给定表达式中所含括号是否正确配对出现的算法

假设一个算术表达式中可以包含三种括号:圆括号"(" 和 ")",方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的 次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。...
  • u013228403
  • u013228403
  • 2014-04-25 23:30:02
  • 2238

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

  • 2010年01月25日 16:10
  • 668B
  • 下载

栈的基本操作及如何判断一个表达式中的左右括号是否匹配

我们都知道,栈(stack)具有后进先出的特点,所以在我们思考一个表达式中的左右括号是否匹配问题时,就自然会想到是不是可以利用栈的特点来判断左右括号是否匹配呢? 主要思路如下: 1.扫描整个表达式;...
  • qq_34992845
  • qq_34992845
  • 2017-04-21 12:25:10
  • 2620

用顺序栈判断表达式中括号是否匹配正确

  • 2015年11月20日 19:03
  • 275KB
  • 下载

使用链栈判断输入的表达式中的括号是否配对

#include #include using namespace std; typedef char ElemType; typedef struct linknode { ElemTy...
  • wangzhengqu
  • wangzhengqu
  • 2016-03-27 09:58:30
  • 1597
    个人资料
    等级:
    访问量: 5万+
    积分: 1496
    排名: 3万+