注册 登录
编程论坛 数据结构与算法

链栈,求大神看看我写的有什么问题,为什么运行会出错

lisen10 发布于 2017-11-11 21:51, 2047 次点击
#include"stdio.h"
#include"malloc.h"

typedef int DataType; //定义栈的数据类型

typedef struct node
{
    DataType data;
    struct node *next;
}LinkStack;


//初始化栈
void InitStack(LinkStack *top)
{
//    top=(LinkStack *)malloc(sizeof(LinkStack));
    top->next=NULL;
}
//进栈
int Push(LinkStack *top,DataType x)
{
    LinkStack *s;
    s=(LinkStack *)malloc(sizeof(LinkStack));
    if(!s) //当s==NULL执行
        return 0;
    s->data=x;
    s->next=top->next;
    top->next=s;
    return 1;
}
//判断栈空
int EmptyStack(LinkStack *top)
{
    if(top->next==NULL)
        return 1;
    else
        return 0;
}
//出栈
int Pop(LinkStack *top,DataType *e)
{
    LinkStack *s;
    if(EmptyStack(top))
        return 0;
    s=top->next;
    *e=s->data;
    top->next=s->next;
    free(s);
    return 1;
}

//测试函数
void main()
{
    LinkStack *top; //定义栈顶指针--相当头指针
    InitStack(top);//初始化一个栈

//    DataType e;
//    e=1;
//    Push(top,e);
//    Pop(top,&e); printf("%d ",e);


}
6 回复
#2
lisen102017-11-12 09:39
/*
//初始化栈
LinkStack * InitStack()
{
    LinkStack *top;
    top=(LinkStack *)malloc(sizeof(LinkStack));
    top->next=NULL;
    return top;
}*/
////////////////////
void InitStack(LinkStack *top)
{
    top=(LinkStack *)malloc(sizeof(LinkStack));
    top->next=NULL;
}

为什么第二种方法不行?
#3
lisen102017-11-12 10:03
void InitStack(LinkStack *top)
{
//    top=(LinkStack *)malloc(sizeof(LinkStack));//在main()里申请空间却可以,why?
    top->next=NULL;
}
#4
yuccn2017-11-12 14:51
以下是引用lisen10在2017-11-12 10:03:59的发言:

void InitStack(LinkStack *top)
{
//    top=(LinkStack *)malloc(sizeof(LinkStack));//在main()里申请空间却可以,why?
    top->next=NULL;
}


你还没有理解形参和实参
#5
yuccn2017-11-12 14:55
LinkStack *InitStack()
{
    LinkStack *top=(LinkStack *)malloc(sizeof(LinkStack));//在main()里申请空间却可以,why?
    top->next=NULL;
    return top;
}

void main()
{
    LinkStack *top = InitStack();
}

改为这样吧
#6
lisen102017-11-12 15:57
回复 5楼 yuccn
这个通过返回值的我知道,我比较有疑问的是:传指针过函数,申请空间并使指针指向这个空间,为什么不能实现?
#7
九转星河2017-11-14 12:13
回复 6楼 lisen10
总结一条规律……看有没有实现,就看传递时参数有没有加&就明白了~很明显你那个top没有&,除了这个方法外还可以试试把函数返回值传给top~

[此贴子已经被作者于2017-11-14 12:15编辑过]

1