括号匹配问题
计算机扫描括号:(((())))
---------->1 2 3 4 4 3 2 1
最后出现的左括号最先被匹配(LIFO),可以用栈实现该特性
((())())
----->1 2 3 3 2 4 4 1
每出现一个右括号,就“消耗”一个左括号(“消耗”=出栈)
算法:
遇到左括号就入栈,遇到右括号,就”消耗“一个左括号
①扫描到右括号且栈空–右括号单身
②处理完所有的括号后,栈非空–左括号单身
记住:只要出现了右括号,就去找最近一次的左括号(是逻辑上最近,因为存在之前配对已出栈的左括号不用考虑)
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct{
char data[MaxSize]; //静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
//初始化栈
void