| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1143 人关注过本帖
标题:[求助]学数据结构写了个小程序,但是怎么都调不过,求解
只看楼主 加入收藏
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
sTail的首地址在main函数里是个常量,LZ在之后的函数里想改变sTail的值,但是没有返回来

好好学习,天天想上
2013-10-10 14:00
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:0 
回复 10楼 yuccn
楼上说的对!
2013-10-10 14:02
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 9楼 qunxingw
pTail=pHead;///////////链表要有头结点联系起来。
这样子做的话,如果是只是这个程序还可以,但是要是输入多个学生信息的话,那么每一次都要把尾指针只向头结点?
我试过这个程序,确实如果没有这句话,程序会挂掉,我很奇怪,在创建头结点的函数中不是已经有这句话了么?
但是要是把这句加上,即是输入多个学生信息,也只是显示出最后一个。
2013-10-10 14:49
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 11楼 zhaogay
sTail 是stu 类型,我在函数中用的形参是指向stu 类型的指针变量,其实不用返回值,也已经能够改变sTail本身的值了吧

[ 本帖最后由 阿萨德179 于 2013-10-10 14:54 编辑 ]
2013-10-10 14:52
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
回复 14楼 阿萨德179
虽然是这么说的,但是没有在代码里体现出来,列出两点:
1.init()之后的结果是:sHead和sTail的首地址没变,改变的其实是分配后内存的index和sNext,sHead没变。
(更正后)2.input()之后的结果是:新增结点加在了sTail之后,而首结点指向不明确。
之后遍历函数由于sHead->sNext指向不明确,输出结果应该是未知的



[ 本帖最后由 zhaogay 于 2013-10-10 15:58 编辑 ]

好好学习,天天想上
2013-10-10 15:42
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
以下是引用阿萨德179在2013-10-10 14:49:34的发言:

 pTail=pHead;///////////链表要有头结点联系起来。
这样子做的话,如果是只是这个程序还可以,但是要是输入多个学生信息的话,那么每一次都要把尾指针只向头结点?
我试过这个程序,确实如果没有这句话,程序会挂掉,我很奇怪,在创建头结点的函数中不是已经有这句话了么?
但是要是把这句加上,即是输入多个学生信息,也只是显示出最后一个。

有些东西,别人只是提示一下。
程序代码:
void init(pstu pHead,pstu pTail){
    pHead=(pstu)malloc(sizeof(stu));
    pTail=pHead;
  pHead->index=0;
    pHead->sNext=NULL;
}

//添加
void input(pstu pHead,pstu pTail){
     pstu  p;
     pTail=pHead;
     int m,n=3;
     m=n;
     
     while(n--){
    p=(pstu)malloc(sizeof(stu));
   
    printf("请输入姓名:");
    scanf("%s",p->name);
    printf("请输入学号:");
    scanf("%d",&p->id);
    printf("请输入年龄:");
    scanf("%d",&p->age);
    printf("请输入成绩:");
    scanf("%d",&p->grade);
     
    pTail->sNext=p;
    pTail=p;
    pTail->sNext=NULL;
    p->index=m-n;
   }
}

www.qunxingw.wang
2013-10-10 16:49
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 15楼 zhaogay
好像真的是这样的,我看了以前写的代码都是有一个返回值的,但是我一直觉得没有返回值,直接将main中的地址穿进去也可以,虽然现在我还是没有彻底明白到底是回事。我之前是认为将sTail,和sHead的地址穿进去,sTail和sHead的内容就会发生改变。
2013-10-10 20:35
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
回复 17楼 阿萨德179
没有返回值是可以的,主要是你对指针本事赋值,而不是对指针指向的内存赋值,比如sTail=p,返回去就没有意思,而sTail->sNext=NULL是可以的。

好好学习,天天想上
2013-10-10 21:18
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 18楼 zhaogay
我明白了,原来如此
2013-10-10 21:53
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 18楼 zhaogay
其实我想了一下,其实我觉得这个解释应该要这样:pHead接受了来自sHead的地址,但是因为pHead=malloc();所以这时候pHead就不在指向sHead的这块内存了,所以sHead的值根本没改变,这是才需要返回值将改变后的pHead 付给sHead.
2013-10-10 23:49
快速回复:[求助]学数据结构写了个小程序,但是怎么都调不过,求解
数据加载中...
 
   



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

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