数据结构作业,括号匹配
#include <stdio.h>
#include <stdlib.h>
typedef struct stack
{
char data;
struct stack *next;
}Snode,*Linkstack;
/*初始化*/
void initlinkstack(Linkstack &L)
{
L=NULL;
}
/*进栈*/
int stackpush(Linkstack &L,char e)
{
Linkstack P;
P=(Linkstack)malloc(sizeof(Snode));
P->data=e;
P->next=L;
L=P;
return 1;
}
/*出栈*/
int stackpop(Linkstack &L)
{
Linkstack P=L;
if(L==NULL)
return 0;
L=L->next;
free(P);
return 1;
}
/*取栈顶元素*/
char gettop(Linkstack L)
{
char e;
if(L==NULL)
return 0;
e=L->data;
return e;
}
/*匹配函数*/
void match(char a[])
{
Linkstack L;
char e;int k=0;
initlinkstack(L);
int flag=1;
while(flag&&a[k]!='\0')
{
if(a[k]!='('&&a[k]!=')'&&a[k]!='['&&a[k]!=']'&&a[k]!='{'&&a[k]!='}')
k++;
else
{
switch(a[k])
{
case '(':case'[':case'{':
{
stackpush(L,a[k]);
k++;break;
}
case ')':
{
e=gettop(L);
if(e!='(')
{
flag=0;break;
}
else
{
k++;stackpop(L);break;
}
}
case ']':
e=gettop(L);
if(e!='[')
{
flag=0;break;
}
else
{
k++;stackpop(L);break;
}
case '}':
e=gettop(L);
if(e!='{')
{
flag=0;break;
}
else
{
k++;stackpop(L);break;
}
}
}
}
if(flag==1&&L==NULL)
printf("比配正确!\n");
else
printf("匹配不正确!\n");
}
int main()
{
char a[80];
printf("input a string :\n");
scanf("%s",a);
match(a);
return 0;
}