()A和D是合法序列B和C 是非法序列
()設被判定的操作序列已存入一維數組A中
int Judge(char A[])
//判斷字符數組A中的輸入輸出序列是否是合法序列如是返回true否則返回false
{i=; //i為下標
j=k=; //j和k分別為I和字母O的的個數
while(A[i]!=\) //當未到字符數組尾就作
{switch(A[i])
{caseI: j++; break; //入棧次數增
caseO: k++; if(k>j){printf(序列非法\n)exit();}
}
i++; //不論A[i]是I或O指針i均後移}
if(j!=k) {printf(序列非法\n)return(false);}
else {printf(序列合法\n)return(true);}
}//算法結束
[算法討論]在入棧出棧序列(即由I和O組成的字符串)的任一位置入棧次數(I的個數)都必須大於等於出棧次數(即O的個數)否則視作非法序列立即給出信息退出算法整個序列(即讀到字符數組中字符串的結束標記\)入棧次數必須等於出棧次數(題目中要求棧的初態和終態都為空)否則視為非法序列
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/22703.html