关于 栈 的 问题 。 为什么 Push 函数 top 始终 是 NULL ？
引用 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 ) { // 你 这 是 在 做 什么 ？ ？？ ？ 又 申请 空间 ， 又 复制 NULL ， 你 到底 想 干 啥 ？ top = ( StackNode * ) malloc ( sizeof ( StackNode ) ) ; top = NULL ; return top ; } int Judge ( StackNode * top ) { if ( top = = NULL ) { printf ( " 建栈 成功 . \n " ) ; return 1 ; } else { printf ( " 建栈 失败 ！ \ 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 ) ) ; / / 如果 是 左边 的 ， 进栈 。 p - > next = NULL ; p - > data = * ch ; p - > next = top ; top = p ; } if ( * ch = = ' } ' | | * ch = = ' ) ' | | * ch = = ' ] ' | | * ch = = ' > ' ) { if ( top = = NULL ) { printf ( " 栈空 . \ n " ) ; / / 如果 是 右边 的 且 top = NULL 栈空 ， 说明 不 平衡 。 还 有 符号 没有 平衡 。 return 0 ; } else { switch ( * ch ) { case ' { ' : if ( top - > data ! = ' } ' ) // 如果 是 右边 的且 top ！ = 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 ; } 我 去 ， 居然 回到 你 那个 帖子 上 去 了 谢谢 ！ 我 的 方法 我 改 过来 了 ， 不过 你 的 我 没 懂 啊 。 char * ch = ( char * ) malloc ( sizeof ( char ) * 20 ) ; gets ( ch ) ; 是 什么 意思 啊 ？ 还 有 我 的 那 个 StackNode * InitStack ( StackNode * top ) 是 不 是 也 没用 ， 只 需要 将 top = NULL ， 就 可以 了 ？ 是 吗 ？
