剛學(xué)到數(shù)據(jù)結(jié)構(gòu),奇怪的是第一次找不到這類的視頻了,一搜全是C語言的,書上又說的不夠清楚。這個題目一眼看到我就會聯(lián)想到去用String的方法或數(shù)組來解答,書上用棧來解答說明這是棧的一個典型用法,那么能體現(xiàn)棧的什么優(yōu)點(diǎn)呢?書上的解題代碼:????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嗎,但事實半個括號明顯是不完整的,都不成對,就更談不上配對了啊。還有上面的分析里說左括號進(jìn)棧我理解,右括號出棧我就不理解了,不要它可以不讓它進(jìn)棧,可是根本沒讓它進(jìn)棧過又怎么讓它出棧呢?所謂難者不會,會者不難,我在這上面浪費(fèi)很多時間了,請各位高手幫忙指點(diǎn)迷津,謝謝了!
1 回答
已采納

Caballarii
TA貢獻(xiàn)1123條經(jīng)驗 獲得超629個贊
碰到左括號就進(jìn)棧,碰到右括號是把棧里的左括號出棧一個,這樣一對括號就匹配了。最后結(jié)果有三種情況
運(yùn)行結(jié)束了棧不是空的,說明左括號比右括號多,括號不匹配
運(yùn)行結(jié)束棧空了,說明左右括號一樣多,匹配了
運(yùn)行過程中棧為空的時候又碰到右括號要求出棧,說明這個右括號沒有左括號匹配,括號不匹配
添加回答
舉報
0/150
提交
取消