刚学到数据结构,奇怪的是第一次找不到这类的视频了,一搜全是C语言的,书上又说的不够清楚。这个题目一眼看到我就会联想到去用String的方法或数组来解答,书上用栈来解答说明这是栈的一个典型用法,那么能体现栈的什么优点呢?书上的解题代码: Stack ss =new SequenceStack();//定义栈对象
String s="111(222)333;
int size=s.length();
boolean flag =false;
for(int i=0;i<size;i++){
char c=s.charAt(i);
switch(c){
case 40://左括号“(”
ss.push("(");//入栈
break;
case 41://右括号“)”
if(ss.pop().equals(")"){
flag=true;
}
}
}
System.out.print("括号配对为:"+flag);书上有分析说“可以使用栈来存储字符串中的小括号。遍历字符串中的每个字符,遇到‘(’则入栈,遇到‘)’则出栈,查看出栈的元素是否为‘)’,如果为‘)’则配对,否则不配对”。如果字符串就只有这么半个括号,flag不也是为true吗,但事实半个括号明显是不完整的,都不成对,就更谈不上配对了啊。还有上面的分析里说左括号进栈我理解,右括号出栈我就不理解了,不要它可以不让它进栈,可是根本没让它进栈过又怎么让它出栈呢?所谓难者不会,会者不难,我在这上面浪费很多时间了,请各位高手帮忙指点迷津,谢谢了!
1 回答
已采纳
Caballarii
TA贡献1123条经验 获得超629个赞
碰到左括号就进栈,碰到右括号是把栈里的左括号出栈一个,这样一对括号就匹配了。最后结果有三种情况
运行结束了栈不是空的,说明左括号比右括号多,括号不匹配
运行结束栈空了,说明左右括号一样多,匹配了
运行过程中栈为空的时候又碰到右括号要求出栈,说明这个右括号没有左括号匹配,括号不匹配
添加回答
举报
0/150
提交
取消