| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 414 人关注过本帖
标题:问一个关于链表的问题。
只看楼主 加入收藏
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
问一个关于链表的问题。
关于创建链表,
比如说
struct STU
{
    char tel[12];
    char name[5];
    char qq[12];
    struct STU * next;
};
定义这个结构体,
在创建链表的时候,
关于头结点的问题,
我看论坛里的帖子的定义是这样的,
    struct STU *p, *tail;
     p = (struct STU *) malloc(sizeof(struct STU));
     printf("请输入第1位学生姓名qq及电话:\n");
     scanf("%s%s%s", p->name, p->qq, p->phone);
     p->next = NULL;
     head = p;
     tail = p;
     for (i = 1; i < N; i++)
     {
         p = (struct STU *) malloc(sizeof(struct STU));
         printf("请输入第%d位学生姓名qq及手机号:\n", i + 1);
         scanf("%s%s%s", p->name, p->qq, p->phone);
         tail->next = p;
         p->next = NULL;
         tail = p;
     }

我自己的定义是:
struct STU * pnew;
    pnew=(struct STU*)malloc(sizeof(struct STU));
    pnew->NEXT=NULL;
    pnew=phead;
    for(i=0;i<N;++i)
    {
        STU * plist;
        plist=(struct STU*)malloc(sizeof(struct STU));
        plist->NEXT=NULL;
        printf("请输入第%d个学生的姓名电话和QQ:\n",i+1);
        scanf("%s%s%s",plist->name,plist->tel,plist->qq);
        pnew->NEXT=plist;
        pnew=plist;
    }   
我也想了蛮久,
这两种的区别是,第二种头结点head只保存了指针地址,没有保存数据,从头结点之后开始保存,但是我觉得第一种的代码写的太麻烦了,
我想了好久了,
麻烦各位解释下,哪种好?
搜索更多相关主题的帖子: 结构体 
2013-01-09 20:15
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:14 
这个看设计咯,那自己合适的。
不过
pnew=(struct STU*)malloc(sizeof(struct STU));
     pnew->NEXT=NULL;
     pnew=phead;  //你是否是想 phead=pnew ?搞反了吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-09 20:20
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
回复 2楼 yuccn
我在主函数的最前面定义了head了,抱歉,没表达清楚。
2013-01-09 20:23
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 3楼 x_x
struct STU * pnew;
     pnew=(struct STU*)malloc(sizeof(struct STU));
     pnew->NEXT=NULL;
     pnew=phead; // 前面定义了phead ?那么phead申请空间了的吧,不管怎么样 ,上面的pnew=(struct STU*)malloc(sizeof(struct STU));都是 内存泄露了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-09 20:27
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
回复 4楼 yuccn
前面head申请空间了的,
那么说的话,这里的pnew不应该申请空间了?
2013-01-09 20:31
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
是的如果已经申请了,那么for前面的那个是不需要申请了的。直接 pnew=phead; 这样行了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-09 20:38
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
回复 6楼 yuccn
这两种定义的方法哪个更好啊?
2013-01-09 20:41
快速回复:问一个关于链表的问题。
数据加载中...
 
   



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

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