下面是用链栈做的括号匹配,链栈作为头文件,运行时应先将头文件导入
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType,Status;
typedef struct StackNode
{
SElemType data;
StackNode *next;
}StackNode,*LinkStackNode;
typedef struct LinkStack
{
LinkStackNode top;
int counts=0;
};
Status IN(LinkStack *S)
{
S->top=NULL;
S->counts=0;
return 0;
}
Status push(LinkStack *S,char e)
{
LinkStackNode p;
p=(LinkStackNode)malloc(sizeof(LinkStackNode));
p->next=S->top;
S->top=p;
p->data=e;
S->counts++;
return 0;
}
c GetTop(LinkStack S,char e)
{
LinkStackNode p=S.top;
e=p->data;
return e;
}
Status StackEmpty(LinkStack *S)
{
LinkStackNode p=S->top;
if(p==NULL)return 1;
else
return 0;
}
Status Pop(LinkStack *S,char *e)
{
LinkStackNode p=S->top;
*e=p->data;
S->top=S->top->next;
free(p);
S->counts--;
return 0;
}
Status print(LinkStack *S)
{
if (!S&&S->counts)
{
return 0;
}
LinkStackNode p=S->top;
//printf("%d\n",p->data);
for(;p;)
{
printf("%d\n",p->data);
p=p->next;
}
return 1;
}//上面是头文件
#include"stdio.h"
#include"Stack1.h"
int main()
{
char e[100],f,b;
LinkStack S;
IN(&S);
scanf("%s",e);
f=getchar();
for(int i=0;e[i]!='\0';i++)
{
if(StackEmpty(&S))
push(&S,e[i]);
else if(e[i]-GetTop(S,f)==1||e[i]-GetTop(S,f)==2)
Pop(&S,&b);
else push(&S,e[i]);
}
if(!StackEmpty(&S))printf("illegality\n");
else printf("legal\n");
return 0;
}