| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 580 人关注过本帖
标题:链栈,求大神看看我写的有什么问题,为什么运行会出错
只看楼主 加入收藏
lisen10
Rank: 1
来 自:广东
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-5-6
结帖率:100%
  已结贴   问题点数:20  回复次数:6   
链栈,求大神看看我写的有什么问题,为什么运行会出错
#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);


}
2017-11-11 21:51
lisen10
Rank: 1
来 自:广东
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-5-6
  得分:0 
/*
//初始化栈
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;
}

为什么第二种方法不行?

前方是未知的,下一步需要找准方向与个性的配合。
2017-11-12 09:39
lisen10
Rank: 1
来 自:广东
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-5-6
  得分:0 
void InitStack(LinkStack *top)
{
//    top=(LinkStack *)malloc(sizeof(LinkStack));//在main()里申请空间却可以,why?
    top->next=NULL;
}

前方是未知的,下一步需要找准方向与个性的配合。
2017-11-12 10:03
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:166
帖 子:6788
专家分:42352
注 册:2010-12-16
  得分:10 
以下是引用lisen10在2017-11-12 10:03:59的发言:

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


你还没有理解形参和实参

我行我乐
我的博客:
http://blog.yuccn. net
2017-11-12 14:51
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:166
帖 子:6788
专家分:42352
注 册:2010-12-16
  得分:0 
LinkStack *InitStack()
{
    LinkStack *top=(LinkStack *)malloc(sizeof(LinkStack));//在main()里申请空间却可以,why?
    top->next=NULL;
    return top;
}

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

改为这样吧

我行我乐
我的博客:
http://blog.yuccn. net
2017-11-12 14:55
lisen10
Rank: 1
来 自:广东
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-5-6
  得分:0 
回复 5楼 yuccn
这个通过返回值的我知道,我比较有疑问的是:传指针过函数,申请空间并使指针指向这个空间,为什么不能实现?

前方是未知的,下一步需要找准方向与个性的配合。
2017-11-12 15:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
  得分:10 
回复 6楼 lisen10
总结一条规律……看有没有实现,就看传递时参数有没有加&就明白了~很明显你那个top没有&,除了这个方法外还可以试试把函数返回值传给top~

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


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-14 12:13







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049886 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved