2012/7/9 10:28
栈这种数据结构的特殊性在于”后进先出“,也就是说,事物出现的次序与处理的次序相反。所以在考虑问题时,要判断处理机制中是否含有这种逆序的关系,下面举例说明。
栈这种数据结构的特殊性在于”后进先出“,也就是说,事物出现的次序与处理的次序相反。所以在考虑问题时,要判断处理机制中是否含有这种逆序的关系,下面举例说明。
在括号匹配问题中,要检查一串由'(',')','[',']'四种括号组成的括号串是否匹配。
如下图所示的括号串:
第1个括号出现时,不能匹配,搁置。
第2个括号出现时,它不能与第1个匹配,搁置。
第3个括号出现时,它不能与第2个匹配,搁置。
第4个括号出现时,它与第3个匹配,消去括号3和括号4。
第5个括号出现时,它与第2个匹配,消去括号2和括号5。
第6个括号出现时,它与第1个匹配,消去括号1和括号6。
观察上述匹配过程发现,括号出现的次序与匹配的次序相反,所以使用栈来存储这列括号串易于求解。
#include <stdio.h>
char stack[10010];
char *base, *top;
bool StackIsEmpty(void)
{
if (base == top)
{
return true;
}
return false;
}
int main()
{
int testNum;
char bracket;
scanf("%d", &testNum);
while (testNum-- != 0)
{
base = top = stack;
scanf("\n%c", &bracket);
while (bracket != '\n')
{
if (StackIsEmpty())
{
*top++ = bracket;
}
else if ((*(top-1) == '(' && bracket == ')')
|| (*(top-1) == '[' && bracket == ']'))
{
top--;
}
else
{
*top++ = bracket;
}
scanf("%c", &bracket);
}
if (StackIsEmpty())
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}