括号匹配
(1)从左往右扫描括号
(2)左括号入栈
(3)右括号-栈顶元素出栈与之匹配(判断栈是否为空,是否匹配成功)
bool Check(char str[],int length){
SqStack S;
InitStack(S); //初始化栈
for(int i=0;i<Length;i++){
if(str[i]=='('||str[i]=='['||str[i]=='{'){
push(S,str[i]); //将括号压入栈中
}eles{ //如果不为左括号
if(IsEmpty(S)) {
return 0; //栈内为空则匹配失败
}
char topElem; //栈顶元素
pop(S,topElem);//弹出栈顶元素
if(str[i]==')'&&topElem!=='('){
return 0;
}
if(str[i]==']'&&topElem!==']'){
return 0;
}
if(str[i]=='}'&&topElem!=='}'){
return 0;
}
}
}
return IsEmpty(S);//如果栈内不为空则匹配失败 返回0
}
递归调用
函数调用特点:最后被调用的函数最先执行结束(LIFO)
函数调用时,用栈存储:
①调用返回地址
②实参
③局部变量
缺点:递归层太多,可能导致栈溢出 空间复杂度高