括号的匹配
/**
*检验表达式中所含括号是否匹配正确,如果匹配正确,则返回true,否则返回false
*表达式以"#"结束
*/
Status MatchChing(){
Initstack(S); //初始化空栈
flag=1; //标记匹配结果以控制循环返回结果
cin>>ch; //读入第一个字符
while(ch!='#'&&flag){ //表达式以"#"结尾
switch(ch){
case '[': //若是左括号,则将其压入栈push
case '()': //细节:没有break,将顺序执行
Push(S,ch);
break;
case ')': //若是")",则根据当前栈顶元素的值分情况考虑
if(!StackEmpty(S)&&GetTop(S)=='(') //栈顶非空且栈顶元素是"("
Pop(S,x); //匹配成功 出栈
else flag=0; //栈顶空或不是"(" 匹配失败
break;
case ']': //若是"]",则根据当前栈顶元素的值分情况考虑
if(!StackEmpty(S)&&GetTop(S)=='[') //栈顶非空且栈顶元素是"["
Pop(S,x); //匹配成功 出栈
else flag=0; //栈顶空或不是"[" 匹配失败
break;
}
cin>>ch; //继续读入下一个字符
}
if(StackEmpty(S)&&flag) //匹配成功
return true;
else return false; //匹配失败
}
时间复杂度和字符串的长度有关 故为O(n)
空间复杂度取决于栈的大小 为O(n)