time limit: 1000ms memory limit: 65536k 有疑問?點這裡^_^
給你一串字元,不超過50個字元,可能包括括號、數字、字母、標點符號、空格,你的任務是檢查這一串字元中的( ) ,[ ],是否匹配。
輸入資料有多組,處理到檔案結束。
如果匹配就輸出「yes」,不匹配輸出「no」
sin(20+10)]
yesno
這道題,考察的是對於棧的用法。現階段,棧對於我而言只是一種思考問題的方法:
先入的後處理,而每進入乙個元素(數值)就和他的前乙個元素(數值)相比較,並進行一系列的操作。
本題的思路大體上也是如此:先輸入乙個字串,再將該字串中的「(」,「)」,「」,「【」,「】」輸入另外乙個字元陣列中。再輸入時,如果進入的元素為各種括號的右側,則對棧中的上乙個元素進行判斷,如果恰好是其對應的左部,則使該元素(在棧中的)出棧(將其下標減一)。當然若棧中本就沒有元素即棧為空(下標為零),同樣結束迴圈。,如果輸入的為括號的左半部則繼續向下進行。
題目的突破口在於:
無論什麼括號,一定是從左半部開始,到其右半部結束,故,輸入為左半部時,是不需要進行判斷的(因為元素並未完全輸入,找右半部也是找不到的)。而輸入至右半部出現時,就要與其最靠前的乙個括號元素相比較(也只能和乙個括號的左半部比對),若符合則出棧。一旦無法出棧,就證明這是無法兩兩成功配對的了,那麼,迴圈宣告結束,標記後退出。
在判斷時一方面借助標記元素,另一方面也要通過棧是否為空,只有
棧未標記並且棧為空
,才可以認為該字串滿足要求
ma6174
#include #include #include int main()
else if(j>0&&p[j-1]!='(')
}if(s[i]==']')
if(j>0&&p[j-1]=='[')
else if(j>0&&p[j-1]!='[')
}if(s[i]=='}')
if(j>0&&p[j-1]=='
else if(j>0&&p[j-1]!='}}
if(l==0||j>0)
printf("no\n");
else if(j==0)
printf("yes\n");
}return 0;
}
資料結構實驗之棧四 括號匹配
time limit 1000ms memory limit 65536k 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。輸入資料有多組,處理到檔案結束。如果匹配就輸出 yes 不匹配輸出 no sin 20 10 yesno ma...
資料結構實驗之棧四 括號匹配
資料結構實驗之棧四 括號匹配 time limit 1000ms memory limit 65536k 題目描述 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。輸入 輸入資料有多組,處理到檔案結束。輸出 如果匹配就輸出 yes 不...
資料結構實驗之棧四 括號匹配
給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。輸入資料有多組,處理到檔案結束。如果匹配就輸出 yes 不匹配輸出 no sin 20 10 yesno 鍊錶的方法,較為複雜。需要建立鏈棧,將陣列代替棧的方法換為了線性表 includ...