一个括号匹配的,执行时就错误,编译通过了。
#include<stdio.h>#include<malloc.h>
typedef char ElemType;
typedef struct linknode
{
ElemType data;
struct linknode *next;
}listack;
void initstack(listack *s)
{
s=(listack *)malloc(sizeof(listack));
s->next = NULL;
}
void destroystack(listack *s)
{
listack *p=s,*q=s->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
}
bool stackempty(listack *s)
{
return(s->data==NULL);
}
void push(listack *s,ElemType e)
{
listack *p;
p=(listack *)malloc(sizeof(listack));
p->data=e;
p->next=s->next;
s->next=p;
}
int pop(listack *s,ElemType &e)
{
listack *p;
if(s->next==NULL)
{
return 0;
}
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return 1;
}
int gettop(listack *s,ElemType &e)
{
if(s->next==NULL)
return 0;
e=s->next->data;
return 1;
}
int match(char exp[],int n)
{
int i=0;char e;
int flag=1;
listack *s=NULL;
initstack(s);
while(i<n && flag)
{
if(exp[i]=='(')
push(s,exp[i]);
else if(exp[i]==')')
{
if(gettop(s,e)==1)
{
if(e!='(')
flag=0;
else
pop(s,e);
}
else
flag =0;//无法取栈顶元素表示不匹配
}
i++;
}
if(!stackempty(s))
{
flag=0;
}
destroystack(s);
return flag;
}
int main()
{
char str[100];
int i;
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%c",&str[i]);
}
if(!match(str,n))
printf("不匹配");
else
printf("匹配");
return 0;
}