根据栈“先入后出”的特性,我们可以利用栈进行括号匹配检验。
思路分析:
小括号()、中括号【】、大括号{},检查括号是否匹配,当遇到左括号时,入栈,遇到右括号出栈,最后检查栈中是否还堆积有元素,如果有证明匹配失败,如果栈空,证明匹配成功。
算法实现:
Status Matching()
{
InitStack(S);
char ch;
int flag = 1;
cin >> ch;
while (ch != '#' && flag)//设表达式以‘#’结束
{
switch (ch)
{
case '{':
case '[':
case '(':
Push(S, ch);
break;
case ')':
if (!EmptyStack(S) && GetTop(S) == '(')
Pop(S, x);
else
flag = 0;
break;
case ']':
if (!EmptyStack(S) && GetTop(S) == '[')
Pop(S, x);
else
flag = 0;
break;
case '}':
if (!EmptyStack(S) && GetTop(S) == '{')
Pop(S, x);
else
flag = 0;
break;
}
cin >> ch;
}
if (EmptyStack(S) && flag)
return OK;
else
return ERROR;
}
栈的基本操作附Gitee链接,请自行取用C_start: C语言学习开始的地方