[括号匹配]求大神改错
这个括号匹配的链栈实现程序,整体程序有一些不完整的地方但不影响主体的功能(主要是输出结果时还没调整好)但是在目前这个状况下运行,会出现类似“{[ ]}”这样右括号两次出现但是程序停止运行的情况(实际应该是符合规定的输入)
初步估计是在pop函数和指针使用上有问题,但是解决不了,程序在vc6.0上是可以跑的,
求大神指导!!!!!!!!!!!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Stack
{
char data;
struct Stack *link;
}LNStack;
void InitStack(LNStack *top)
{
LNStack *p;
p=(LNStack*)malloc(sizeof(LNStack));
p->link=NULL;
}
LNStack *Push(LNStack *top,char x)
{
LNStack *p;
p=(LNStack *)malloc(sizeof(LNStack));
p->data=x;
p->link=top;
top=p;
return(p);
}
LNStack *Pop(LNStack *top)
{
LNStack *p;
if(top!=NULL)
{
p=top;
top=p->link;
free(p);
}
p=top;
return(p);
}
char Gettop(LNStack *top)
{
char x;
x=top->data;
return x;
}
void Check(LNStack *top,char str[])
{
LNStack *q;
char ch;
int i=0;
int state=1;
q=(LNStack*)malloc(sizeof(LNStack));
while(state&&(i<strlen(str)))
{
switch(str[i])
{
case'(':
case'[':
case'{':
{
q=Push(top,str[i]);
printf("%c入栈\n",str[i]);
i=i++;
break;
}
case')':
{
ch=Gettop(q);
printf("%c\n",ch);
if(ch=='(')
{
q=Pop(top);
printf("因为读取到‘)’,故上一个‘(’出栈\n");
i++;
state=1;
break;
}
else
printf("匹配错误,多出‘)’\n");
i++;
state=0;
break;
}
case']':
{
ch=Gettop(q);
if(ch=='[')
{
q=Pop(top);
printf("因为读取到‘]’,故上一个‘[’出栈\n");
i++;
state=1;
break;
}
else
printf("匹配错误,多出‘]’\n");
i++;
state=0;
break;
}
case'}':
{
ch=Gettop(q);
if(ch=='{')
{
q=Pop(top);
printf("因为读取到‘}’,故上一个‘{’出栈\n");
i++;
state=1;
break;
}
else
printf("匹配错误,多出‘}’\n");
i++;
state=0;
break;
}
default:i++;
}
}
ch=Gettop(top);
if(ch!=NULL)
printf("匹配错误,多出左括号\n");//单只有左边括号也是不合法的
}
void main()
{
LNStack *top;
char str[20];
top=(LNStack*)malloc(sizeof(LNStack));
top->link=NULL;
printf("请输入字符串:");
scanf("%s",str);
Check(top,str);
}