C指针高手来看看这个程序(链栈的实现)

来源:百度知道 编辑:UC知道 时间:2024/07/06 21:44:38
程序出现段错误,代码如下:
#include<stdio.h>
#include<stdlib.h>

//定义结点类型
struct node{
int data;
struct node *next;
};

typedef struct node Node;

void Init_slink(Node *);//初始化栈
void Push_slink(Node *,int);//进栈
int Pop_slink(Node *);//出栈
int Empty_slink(Node *);//判断空栈

int main(){
Node *top;
Init_slink(top);

Push_slink(top,1);
Push_slink(top,2);
Push_slink(top,3);
Push_slink(top,4);
Push_slink(top,5);
}

void Init_slink(Node *t){
t=(Node *)malloc(sizeof(Node));
t->next=NULL;
}

void Push_slink(Node *t,int n){
Node *p;
p=(Node *)malloc(sizeof(Node));
p->data=n;
p->next=t->next;
t->next=p;
return ;
}

int Pop_slink(Node *t){
Node *p;
int i;
p=(Node *)malloc(sizeof(N

稍微改了一下
#include<stdio.h>
#include<stdlib.h>

//定义结点类型
struct node{
int data;
struct node *next;
};

typedef struct node Node;
void Init_slink(Node *);//初始化栈
void Push_slink(Node *,int);//进栈
void Pop_slink(Node *);//出栈
int Empty_slink(Node *);//判断空栈
int main()
{
Node top;
Init_slink(&top);
int a=1,b=2,c=3;//如果注释掉该句程序出现段错误
Push_slink(&top,a);
Push_slink(&top,b);
Push_slink(&top,c);
Push_slink(&top,4);
Push_slink(&top,5);
Pop_slink(&top);
Pop_slink(&top);
Pop_slink(&top);
Pop_slink(&top);
Pop_slink(&top);
// Pop_slink(top);//注释掉该句程序成功运行(经断点调试确定以上进栈操作都成功),否则程序出现段错误;把该句替换成其他任何语句情况一样(例如 int i),为啥?超级困惑ing!
return 0;
}

void Init_slink(Node *t)
{
t=(Node *)malloc(sizeof(Node));
t->next=NULL;
}

void Pus