| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1094 人关注过本帖
标题:链表结点的创建问题
取消只看楼主 加入收藏
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:5 
链表结点的创建问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include "malloc.h"
#define NULL 0
   struct student
   {
       long int number;
       char name[20];
       float score;
       struct student *next;
  
   };
   struct student *creat(struct student *head);
   void output(struct student *head);
   void main(void)
   {
       struct student *head;
       head=NULL;
       head=creat(head);
       output(head);
   }
   struct student *creat(struct student *head)
   {
       int n=1;
       struct student *p1,*p2;
       p1=p2=(struct student*)malloc(sizeof(struct student));
       printf("input %dth number,name,score:\n",n++);
       scanf("%d%s%f",&p1->number,&p1->name,&p1->score);
       p1->next=NULL;
       while(p1->number>0)
       {
           if(head==NULL)
               head=p1;
           else
               p2->next=p1;
           p2=p1;/****/
           p1=(struct student*)malloc(sizeof(struct student));
           printf("input %dth name,score:\n",n++);
           scanf("%d%s%f",&p1->number,&p1->name,&p1->score);
           p1->next=NULL;
       }
       free(p1);
       return head;
  
   }
void output(struct student *head)
{
    while(head!=NULL)
    {
        printf("学号:%ld,姓名:%s,成绩:%5.2f\n",head->number,head->name,head->score);
        head=head->next;
   
    }

}
求解释心中的疑问。
上面的“struct student *creat(*head)”函数的作用是创建链表结点,在开始的时候指针p1 p2都指向申请好的“struct student”型的地址单元,在给p1所指的空间赋值之后,进入while循环体中,起初判断头指针为空后,后将头指针指向新的结点p1,然后又把p1的地址赋给p2。我的问题是起初申请的空间不是p1 p2 共同指向吗?为何还要再赋?还有头指针非空,执行一次循环体之后回来,通过语句“p2->next=p1”将新创建的结点与上一个结点链接起来,这是p2所指结点的指针域中存放p1,也就是使p2指向了p1,为何还要有“p2=p1'',将p1赋给p2呢?好像怪怪的?
求解释
2013-04-04 19:33
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 楼主 第二周杰伦
听不懂啊。这是书上的,逻辑上应该没问题吧。它是通过循环体的第一次执行先创建头结点,然后再通过其他次的循环体执行创建其它结点。就是那就几句没有理解糊里糊涂。我还想问一下其它创建方式的的思路有事怎样的?请指点一二。
2013-04-04 20:39
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 4楼 beyondyf
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

像素不好,拍的不清晰
2013-04-05 00:09
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 4楼 beyondyf
程序代码:
#include "malloc.h"
#include <stdlib.h>
#include <stdio.h>
#define NULL 0
   struct student
   {
       long int number;
       char name[20];
       float score;
       struct student *next;
   };
   struct student *creat(struct student *head);
   void putout(struct student *head);
   void main(void)
   {
       struct student *head;
       head=NULL;
       head=creat(head);
       putout(head);
  
   }
   struct student *creat(struct student *head)
   {
       int n=1;
       struct student *p1,*p2;
       p1=p2=(struct student*)malloc(sizeof(struct student));
       printf("Input %dth number,name,score:\n",n++);
       scanf("%d%s%f",&p1->number,&p1->name,&p1->score);
       p1->next=NULL;
       while(p1->number>0)
       {
           if(head==NULL)
               head=p1;
           else
               p2->next=p1;
           p2=p1;
           p1=(struct student*)malloc(sizeof(struct student));
           printf("Input %dth number,name,score:\n",n++);
           scanf("%d%s%f",&p1->number,&p1->name,&p1->score);
           p1->next=NULL;
       }
       free(p1);
       return head;
   }
   void putout(struct student *head)
   {
       while(head!=NULL)
       {
           printf("学号:%ld,姓名:%s,成绩:%5.2f\n",head->number,head->name,head->score);
           head=head->next;
       }
   }
大师,这是那段代码,完全一样。还有我在网上找了那本书的图片在下面
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-04-05 00:48
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 8楼 beyondyf
首先,非常感谢版主这么帮我。抽出时间给我解释。但是我看老谭书里面的思路跟这个差不多,而且很多东西和版主所说的不美观的程序如出一辙,我没有办法获得代码和图片,我前几天上传谭浩强C程序电子版,在最新上传资源上,版主可以下载下看一看,在298和299页。又怎么解释,现在是更是身在此山中了。
2013-04-05 21:11
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 12楼 beyondyf
图片附件: 游客没有浏览图片的权限,请 登录注册

是不是这本书,图书馆好像没有,有没有电子档的?
还有,我马上结束c的学习进入数据结构了,我选的是严蔚敏的《数据结构》,听说这是个经典,在这本书里,讲链表的地方应该能重新给我比较严谨的讲解吧
2013-04-05 22:47
快速回复:链表结点的创建问题
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017763 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved