1. 括号匹配的检验假设表达式中含有3种括号:(),[],{},其嵌套的顺序随意。检验括号是否匹配。基本思想:在算法中设置一个栈,每读入一个括号,若是右括号,则或者与栈顶匹配的左括号相互消解,或者是不合法的情况;若是左括号,则直接压入栈中。若括号匹配,在算法的开始和结束时,栈都应该是空的。
代码: 1voidcheck()2{//对于输入的任意一个字符串,检验括号是否配对3SqStack s;4SElemType ch[80],*p,e;5if(InitStack(s))//初始化栈成功6{7scanf("%s",ch);8p=ch;9while(*p)//没到串尾10switch(*p)11{12case'(':13case'[':Push(s,*p);14p++;15break;//左括号入栈,且p++,读下一个字符...
printf("栈为空!"); return-1; } returnS-> data[S-> top--]; } 6. 括号匹配 出现(,则压入栈,出现)则出栈,同时判断弹出的top值是否为-1. 如果为1,说明)括号多了,弹不出(括号了。最后判断栈是否为空,如果不为空,则说明有多余的(符号。 //括号匹配 voidPrintMatchedPairs(char*expr) { SeqStackS...
括号匹配 假设表达式中允许包含三种括号:圆括号( )、方括号[ ]和花括号{ },其嵌套的顺序随意。 { ( [ ] ( ) ) }或[ { ( [ ] [ ] ) } ]等为正确的格式,[ ( ] 、( [ ( ) ) 、( ( ) ]均为不正确的格式。 检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。
自然使原有的在栈中的所有未消解的期待的急迫性都降了一级。另外,在算法的开始和结束时,栈都应该是空的。BracketMatching.c利用了前面的C封装的顺序栈对象 用线性表表示的顺序栈 实现了输入任意一串字符串,检测字符串中三种括号是否匹配的功能。github源码 运行BracketMatching,显示:示例:
对于输入的一个算术表达式字符串,请用一算法判断其中圆括号是否匹配,若匹配则返回true,否则返回false。 本题可用栈的操作来实现:用一外循环来读入表达式中的字符,如遇左括号“(”就进栈;遇到右括号“)”就判断栈是否为空:若栈为空(说明之前没有“(”进栈,显然不匹配),返回false,否则退栈(说明“(”“)”是...