int i,top=-1
scanf("%s",s)
for(i=0s[i]i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')stack[++top]=s[i]
else if(s[i]==')'||s[i]==']'||s[i]=='}')
if(top>=0&&(stack[top]=='('&&s[i]==')'||stack[top]=='['&&s[i]==']'||stack[top]=='{'&&s[i]=='}'))--top
else {printf("error!\n")return 0}
}
if(top==0)printf("OK!\n")
else printf("error!\n")
for(i = s->topi>=0i--) { //遍历栈printf("%d->",s->data)
}
这里data你定义的是数组名所以
printf("%d->",s->data[i])
求采纳,求经验,求悬赏
希望能解决您的问题。
1. 想通过调用函数改变某个变量的值,必须传递这个变量的地址。也就是在InitStack中申请的内存并没有赋给Main中的s变量,会导致后面的访问出错。改为引用就可以了:void InitStack(SqStack* &s)//初始化栈
{
s=(SqStack *)malloc(sizeof(SqStack))
s->top=-1
}
2.在"Pop(s,e)", 这个e并没有内存,导致"*e=s->data[s->top]"出错。
需要给它申请内存:
ElemType *e = (ElemType*)malloc(sizeof(ElemType))
最后"free(e)"一下。