<s>关于栈的问题。</s><s>为什么Push函数top始终是NULL？</s>
<s>引用 2 楼 N_sev7 的回复: #include<stdio.h> #include<malloc.h> #include<string.h> typedef char elemtype; typedef struct stacknode{ elemtype data; struct stacknode *next; }StackNode; //建栈 StackNode *InitStack(StackNode *top){ //你这是在做什么？</s><s>？？</s><s>？又申请空间，又复制NULL，你到底想干啥？</s><s>top=(StackNode *)malloc(sizeof(StackNode)); top=NULL; return top; } int Judge(StackNode *top){ if(top==NULL) { printf("建栈成功.\n"); return 1; } else { printf("建栈失败！</s><s>\n"); return 0; } } //进栈 int Push(StackNode *top){ StackNode *p,*q; char *ch = (char*)malloc(sizeof(char)*20); ///只改了一下先把字符串接收完了， gets(ch); ////然后逐一分析，具体你的方法该怎么改还没时间帮你看 while('#' != *ch) { if(*ch=='{'||*ch=='('||*ch=='['||*ch=='<') { p=(StackNode *)malloc(sizeof(StackNode));//如果是左边的，进栈。</s><s>p->next=NULL; p->data=*ch; p->next=top; top=p; } if(*ch=='}'||*ch==')'||*ch==']'||*ch=='>') { if(top==NULL) { printf("栈空.\n");//如果是右边的且top=NULL栈空，说明不平衡。</s><s>还有符号没有平衡。</s><s>return 0; } else { switch(*ch) { case '{':if(top->data!='}')//如果是右边的且top！</s><s>=NULL出栈 return 0; else break; case '(':if(top->data!=')') return 0; else break; case '[':if(top->data!=']') return 0; else break; case '<':if(top->data!='>') return 0; else break; } q=top; top=top->next; free(q); } } ++ch; } if(top==NULL) return 1; else return 0; }; int main(){ StackNode *top = NULL; int k; //top=InitStack(top); Judge(top); printf("请输入带{} () [] <>的字符的字符串以“#”号键结束:"); k=Push(top); if(k==1) printf("符号平衡.\n"); else printf("符号不平衡.\n"); return 0; } 我去，居然回到你那个帖子上去了 谢谢！</s><s>我的方法我改过来了，不过你的我没懂啊。</s><s>char *ch = (char*)malloc(sizeof(char)*20); gets(ch);是什么意思啊？</s><s>还有我的那个StackNode *InitStack(StackNode *top)是不是也没用，只需要将top=NULL，就可以了？</s><s>是吗？</s>
