//修改后的代码. 1)top要赋值,不然试图引用空指针,bottom系统默认赋值为空指针也就相当于NULL。2)入栈与出栈代码中的top指向也要修改,逻辑问题。自己对比一下下面修改好的代码了。
#include
#include
//结点定义
typedef char datatype;
typedef struct Node
{
datatype data;
struct Node *next;
}StackNode;
StackNode *top; // 创建头结点
StackNode *bottom;
//入栈//
void Push( datatype x )
{
StackNode *p; // 创建一个新结点p
p=(StackNode *)malloc(sizeof(StackNode));
p->data=x; // 设置p结点
p->next=top->next;
top->next=p; //头结点next指向新的栈顶结点p
}
//出栈//
void PrintStack(StackNode *s, datatype q )
{
StackNode *p; // p指向被删除结点
q=s->next->data;// 传回栈顶结点的数据
putchar(q);
p=top->next;
top->next=p->next;
free(p); // 释放p结点
}
void main()
{
char x;
top = (StackNode *)malloc(sizeof(StackNode));
top->next = NULL;
printf("输入栈元素:\n");
x=getchar();
while(x!='!')
{
Push(x);
x=getchar();
}
char q;
while(top->next!=bottom)
{PrintStack(top, q);}
}