标题:在看一个学生成绩管理程序遇到的一个问题
只看楼主
lxqlyld
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:116
专家分:125
注 册:2012-6-18
结帖率:85.29%
已结贴  问题点数:20 回复次数:2 
在看一个学生成绩管理程序遇到的一个问题
我在写学生成绩管理程序中遇到了一些疑惑,我将程序中的一些内容写在下面:
struct student //记录学生信息的结构体
        {
          int ID;//学号
          char Name[9];//姓名
          int Sex;
          double Math,Chinese,English;//成绩
          struct student *Pre;//这地方不知什么意思,请也帮说明一下,谢谢
          struct student *Next;//这地方不知什么意思,请也帮说明一下,谢谢
        };
struct student *First;//作为指向学生信息链表(双向链表)的第一个元素的地址。
struct student *temp=(struct student *)malloc(sizeof(struct student));//记录新添加的学生信息。
//[b]以下是我迷惑的内容
if(!First) //如果没有记录(此处是书上注释)
   {
     First=temp;
     First->Next=First;
     First->Pre=First; //环形链表(此处是书上的注释)
   }
   else
   {
     temp->Pre =First->Pre ;
     temp->Next=First;
     temp->Pre->Next=temp;
     temp->Next->Pre=temp;
   }
请各位高手将if语句和else语句的内容帮我注释以下,那些关于Pre,Next的赋值弄的我头都大了,硬是没看明白,不知道有什么作用。非常感谢,我没有多少分,请各位别嫌少
如果各位嫌麻烦,跟我说说temp->Pre->Next和temp->Next->Pre是什么意思,有什么不同,另外temp->Next和temp->Pre是不是分别指向temp的下一个地址和前一个地址?

[ 本帖最后由 lxqlyld 于 2012-10-19 10:59 编辑 ]
搜索更多相关主题的帖子: Chinese 管理程序 信息 English 
2012-10-19 10:04
lchpersonal
Rank: 2
等 级:论坛游民
威 望:1
帖 子:34
专家分:81
注 册:2012-7-27
得分:20 
struct student //记录学生信息的结构体
        {
          int ID;//学号
          char Name[9];//姓名
          int Sex;
          double Math,Chinese,English;//成绩
          student *Pre;//此处表示一个指向本结构类型(前一个结构体)的指针
          student *Next;//此处表示一个指向本结构类型(后一个结构体)的指针
                       //一个结构体对象只能存一个学生的信息,多个学生的信息在多个结构体对象中,就需要指针把他们串起来。
        };
struct student *First;//作为指向学生信息链表(双向链表)的第一个元素的地址。
struct student *temp=(struct student *)malloc(sizeof(struct student));//记录新添加的学生信息。
//[b]以下是我迷惑的内容
if(!First) //如果没有记录(此处是书上注释) //此处是判断系统中是否有学生记录,First指向头结点,头结点为空那么系统中无记录
   {
     First=temp;      //把First指向 新申请的结点(temp指向的位置)
     First->Next=First;//自己的next域指向自己形成环
     First->Pre=First; //环形链表(此处是书上的注释) // 自己的next域指向自己形成环
    }
   else   //此处表示头结点不为空,即,系统中之前已经存有学生记录了
   {
     temp->Pre =First->Pre ; //temp指向的是新申请的第二个结点,把第二个结点的pre域指向第一个结点(因为 First->pre指向的是第一个结点)
     temp->Next=First;       //temp的next指向第一个结点,形成新的环
     temp->Pre->Next=temp;    //temp->Pre表示第一个结点,所以temp->Pre->Next是第一个结点的Next,使其指向temp(第二个几点);就是把他们连起来
     temp->Next->Pre=temp;     //同理这里是First结点的pre指针指向temp结点,此时环形成了
   }
有哪里不懂的再慢慢琢磨一下!

重剑无锋,大巧不工
2012-10-19 12:53
lxqlyld
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:116
专家分:125
注 册:2012-6-18
得分:0 
回复 2楼 lchpersonal
哥们,能不能告诉一下QQ号啊,我还是有点不太明白,想请教一下
 temp->Pre =First->Pre ; //temp指向的是新申请的第二个结点,把第二个结点的pre域指向第一个结点(因为 First->pre指向的是第一个结点)。这里First->pre为什么指向第一个节点,不是指向第一个节点的前一个节点么
还有啊,我看不出来为什么要用else语句,我感觉只要if语句就可以了,else语句是干什么的非常感谢你的帮助

[ 本帖最后由 lxqlyld 于 2012-10-19 15:58 编辑 ]
2012-10-19 13:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-383589-1-1.html




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

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