有错的代码:
# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct NODE { int data; struct NODE *pNext; }NODE,*PNODE; typedef struct stack { PNODE pTop; PNODE pBottom; }STACK,*PSTACK; void init(PSTACK); void push(PSTACK,int); void traverse(PSTACK pS); int main(void) { STACK S; init(&S); push(&S,1); push(&S,2); push(&S,3); push(&S,4); push(&S,5); push(&S,6); push(&S,7); push(&S,8); traverse(&S); return 0; } void init(PSTACK pS) { pS ->pTop = (PNODE)malloc(sizeof(NODE)); if(NULL == pS ->pTop) { printf("动态内存分配失败!/n"); exit(-1); } else { pS ->pTop = pS ->pBottom; //错误就出在这里 pS ->pTop ->pNext = NULL; } } void push(PSTACK pS,int val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew ->data = val; pNew ->pNext = pS ->pTop; pS ->pTop = pNew; return; } void traverse(PSTACK pS) { PNODE p = pS ->pTop; while(p != pS ->pBottom) { printf("%d ",p ->data); p = p ->pNext; } printf("/n"); return; }
改正后的代码:
# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct NODE { int data; struct NODE *pNext; }NODE,*PNODE; typedef struct stack { PNODE pTop; PNODE pBottom; }STACK,*PSTACK; void init(PSTACK); void push(PSTACK,int); void traverse(PSTACK pS); int main(void) { STACK S; init(&S); push(&S,1); push(&S,2); push(&S,3); push(&S,4); push(&S,5); push(&S,6); push(&S,7); push(&S,8); traverse(&S); return 0; } void init(PSTACK pS) { pS ->pTop = (PNODE)malloc(sizeof(NODE)); if(NULL == pS ->pTop) { printf("动态内存分配失败!/n"); exit(-1); } else { pS ->pBottom = pS ->pTop;//在这里把错误改过来后就可以了 pS ->pTop ->pNext = NULL; } } void push(PSTACK pS,int val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew ->data = val; pNew ->pNext = pS ->pTop; pS ->pTop = pNew; return; } void traverse(PSTACK pS) { PNODE p = pS ->pTop; while(p != pS ->pBottom) { printf("%d ",p ->data); p = p ->pNext; } printf("/n"); return; }