[題目分析]表達式中的括號有以下三對()[]{}使用棧當為左括號時入棧右括號時若棧頂是其對應的左括號則退棧若不是其對應的左括號則結論為括號不配對當表達式結束若棧為空則結論表達式括號配對否則結論表達式括號不配對
int Match(LinkedList la)
//算術表達式存儲在以la為頭結點的單循環鏈表中本算法判斷括號是否正確配對
{char s[]; //s為字符棧容量足夠大
p=la>link; //p為工作指針指向待處理結點
StackInit(s); //初始化棧s
while (p!=la) //循環到頭結點為止
{switch (p>ch)
{case (:push(sp>ch); break;
case ):if(StackEmpty(s)||StackGetTop(s)!=()
{printf(括號不配對\n); return();} else pop(s);break;
case [:push(sp>ch); break;
case ]: if(StackEmpty(s)||StackGetTop(s)!=[)
{printf(括號不配對\n); return();} else pop(s);break;
case {:push(sp>ch); break;
case }: if(StackEmpty(s)||StackGetTop(s)!={)
{printf(括號不配對\n); return();} else pop(s);break;
} p=p>link; 後移指針
}//while
if (StackEmpty(s)) {printf(括號配對\n); return();}
else{printf(括號不配對\n); return();}
}//算法match結束
[算法討論]算法中對非括號的字符未加討論遇到右括號時若棧空或棧頂元素不是其對應的左圓(方花)括號則結論括號不配對退出運行最後若棧不空仍結論括號不配對
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/22702.html