一、栈应用:
括号匹配:
当读入第1个左括号时,期待下一个出现的右括号与第1个左括号匹配,若读入第2个左括号,则期待下一个出现的右括号与第2个左括号匹配…读入第n个左括号,则期待下一个出现的右括号与第n个左括号匹配,匹配成功后,期待下一个右括号与第n-1个左括号匹配…直到所有的左括号全被匹配完成,处理过程与栈思想吻合,因此算法思想如下:
-
设置一个空栈,顺序读入括号
-
若是左括号,压入栈
-
若是右括号,则与栈顶的左括号匹配,不匹配或栈空则报错,匹配则弹出栈顶元素
-
没有括号匹配,则检查栈是否为空,不空则代表有左括号没被匹配,报错,空则代表匹配成功
代码实现:
bool BracketCheck(char Bracket[], int length)
{
SqStack S;
InitStack(S);
for (i = 0; i < length; i++) {
if (Bracket[i] == '(' || Bracket[i] == '{' || Bracket[i] == '[' ) {
Push(S, Bracket[i]);
} else {
if (Empty(S))
return false;
char TopElem;
Pop(S, TopElem);
if (TopElem == '(' && Bracket[i] != ')' )
return false;
if (TopElem == '[' && Bracket[i] != ']' )
return false;
if (TopElem == '{' && Bracket[i] != '}'