利用栈来实现括号匹配:
虽然括号匹配用数组实现比较简单,既然学习了栈,就应该用一下;
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 20
typedef struct
{
char *base;
char *top;
int stacksize;
}sqstack;
void initstack(sqstack *s)
{
s->base=(char *)malloc(STACKSIZE*sizeof(char));
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=STACKSIZE;
}
void push(sqstack *s,char e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char* )realloc(s->base,(s->stacksize+STACKSIZE)*sizeof(char));
if(!s->base) exit(0);
}
*(s->top)=e;
s->top++;
}
void pop(sqstack *s,char *e)
{
if(s->top==s->base) exit(0);
s->top--;
*e=*(s->top);
}
int empty_stack(sqstack *s)
{
if(s->base==s->top)
return 1;
else
return 0;
}
int main()
{
sqstack s;
initstack(&s);
char ch[100],*p;
char i;
gets(ch);
p=ch;
while(*p)
{
switch(*p)
{
case'(':
case'[':
case'{':
push(&s,*p++);break;
case']':
case'}':
case')':
if(!empty_stack(&s))
{
pop(&s,&i);
if((i=='{'&&*p=='}')||(i=='['&&*p==']')||(i=='('&&*p==')'))
p++;
else{
printf("匹配失败");
return 0;
}
}
else
{
printf("匹配失败");
return 0;
}
break;
default:p++;
}
}
if(empty_stack(&s))
{
printf("匹配成功");
return 0;
}
else
{
printf("匹配失败");
return 0;
}
}
利用数组解决括号匹配:
#include<stdio.h>
int main()
{
char a[100],c=' ';
int last=0;
int i;
while(c!='\n')
{
scanf("%c",&c);
if(c=='('||c=='['||c=='{')
{
last++;
a[last]=c;
}
else
{
if(last<0)
{
printf("No\n");
return 0;
}
else if(c==')')
{
if(a[last]=='(')
last--;
else
{
printf("No\n");
return 0;
}
}
else if(c==']')
{
if(a[last]=='[')
last--;
else
{
printf("No\n");
return 0;
}
}
else if(c=='}')
{
if(a[last]=='{')
last--;
else
{
printf("No\n");
return 0;
}
}
}
}if(last>0)
printf("No\n");
else printf("Yes\n");
return 0;
}