栈是一种只允许在栈顶增加和删除元素的数据结构。
利用栈实现括号匹配会非常简单,只需要设置一个栈,指向栈顶的top;利用top++或top–实现入栈和出栈。
实现匹配还需要条件判断,当出现右括号时候,就与栈顶元素比较。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//s字符串作栈,top为栈顶,a用来存储所要判断的字符串
char s[101],a[101];
gets(a);
int len=strlen(a),i;
int top=0;
for(i=0;i<len;i++)
{
//判断是否是右括号,如果不是将字符入栈
if(a[i]!= ‘)’ && a[i]!=’]’ && a[i]!=’}’)
{
s[++top]=a[i];
}
else
{
//如果是右括号,与栈顶元素比较,匹配则出栈
//判断是否是匹配,只需看top最后的值是否是0,为0则说明括号是匹配的
switch(a[i])
{
case ‘)’:
if(s[top]’(’)
{
--top;
break;
}
else
break; case ‘]’:
if(s[top]’[’)
{
--top;
break;
} else
break; case ‘}’:
if(s[top]’{’)
{
--top;
break;
} else
break;
}
}
}
printf("%d\n",top);
if(top0)
printf(“YES!”);
else
printf(“NO!”); return 0;
}