该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是我自己写我的括号匹配代码,调试时不管输入什么括号,总是显示输出匹配,不知道错误出在哪里。代码奉上#include
#include
typedef char ElemType;
typedef struct linknode
{
ElemType data; //数据域
struct linknode *next; //指针域
} LinkStNode; //链栈类型
void InitStack(LinkStNode *&s)
{
s=(LinkStNode *)malloc(sizeof(LinkStNode));
s->next=NULL;
}
void DestroyStack(LinkStNode *&s)
{
LinkStNode *p=s->next;
while (p!=NULL)
{
free(s);
s=p;
p=p->next;
}
free(s); //s指向尾结点,释放其空间
}
bool StackEmpty(LinkStNode *s)
{
return(s->next==NULL);
}
void Push(LinkStNode *&s,ElemType e)
{ LinkStNode *p;
p=(LinkStNode *)malloc(sizeof(LinkStNode));
p->data=e; //新建元素e对应的结点p
p->next=s->next; //插入p结点作为开始结点
s->next=p;
}
bool Pop(LinkStNode *&s,ElemType &e)
{ LinkStNode *p;
if (s->next==NULL) //栈空的情况
return false;
p=s->next; //p指向开始结点
e=p->data;
s->next=p->next; //删除p结点
free(p); //释放p结点
return true;
}
bool GetTop(LinkStNode *s,ElemType &e)
{ if (s->next==NULL) //栈空的情况
return false;
e=s->next->data;
return true;
}
bool Match(LinkStNode *st,char exp[],int n)
{
int i=0;char e;
bool match=true;
while(i
{
if(exp[i]=='(')
Push(st,exp[i]);
else if(exp[i]==')')
{
if(GetTop(st,e)==true)
{
if(e!='(')
match=false;
else
Pop(st,e);
}
else match=false;
}
if(exp[i]=='[')
Push(st,exp[i]);
else if(exp[i]==']')
{
if(GetTop(st,e)==true)
{
if(e!='[')
match=false;
else
Pop(st,e);
}
}
if(exp[i]=='{')
Push(st,exp[i]);
else if(exp[i]=='}')
{
if(GetTop(st,e)==true)
{
if(e!='{')
match=false;
else
Pop(st,e);
}
}
i++;
}
if(!StackEmpty(st))
match=false;
DestroyStack(st);
return match;
}
int main()
{
int n=1,i;
printf("请输入括号符号的数量\n");
scanf("%d",&n);
char *exp[n]={"(",")"};
printf("请逐个输入括号符号(用空格隔开)");//输出 “请逐个输入括号符号()” for(i=0;i
{
scanf("%c",&exp[i]);
}
for(i=0;i
{
printf("%c",exp[i]);
}
LinkStNode * st;
InitStack(st);
bool match;
match=Match(st,exp[0],n);
if (match=true)
{//输出匹配
printf("输出匹配\n");
}
else
printf("输出不匹配 \n");
}