一、问题描述
书上P49 3.2.2,如书上的描述就是对于输入的括号进行合法性校验。
二、数据结构和算法
1、栈数据结构(略)
参见数据结构(5)栈
2、算法实现
//括号匹配
void ParathesesMatch(char * str){
//传进来的是一串括号字符串
SqStack stack;
InitStack(stack);
int i = 0,flag = 0;
char e;
while (str[i])
{
//字符串还有在的情况
switch (str[i])
{
case '[':
case '(':
//左括号的情况都是进栈的
Push(stack,str[i]);
i++;
break;
case ']':
GetTop(stack,e);
if (e == '[')
{
//匹配成功
Pop(stack,e);
}
else
{
//匹配失败的 应该结束
flag = 1;
}
i++;
break;
case ')':
GetTop(stack, e);
if (e == '(')
{
//匹配成功
Pop(stack, e);
}
else
{
//匹配失败的 应该结束
flag = 1;
}
i++;
break;
default:
break;
}
if (flag){
break;//结束循环
}
}
if (StackEmpty(stack))
{
printf("匹配成功\n");
}
else
{
printf("匹配失败\n");
}
}
三、执行
//括号匹配
char str1[20] = "[([][])]";
ParathesesMatch(str1);
char str2[20] = "[([][[][]]])]))";
ParathesesMatch(str2);
输出:
匹配成功
匹配失败
请按任意键继续. . .