在看一个学生成绩管理程序遇到的一个问题,关于指针的Pre和Next
我在写学生成绩管理程序中遇到了一些疑惑,我将程序中的一些内容写在下面:
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的下一个地址和前一个地址?
[解决办法]
temp是个新节点,代码是把temp加入链表。你找本数据结构C++版看吧。里面有图应该讲的很清楚。
[解决办法]
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;//将头结点储存到temp中
First->Next=First;//头结点的后继指向头结点
First->Pre=First; //环形链表(此处是书上的注释)头结点的前驱指向头结点
}
else//头结点中木有数据的时候 构造出以temp为头结点的环形链表
{
temp->Pre =First->Pre ;//保存头结点前驱指针
temp->Next=First;//保存头结点
temp->Pre->Next=temp;//将头结点的前驱指向头tenp
temp->Next->Pre=temp;//将头结点前驱指向temp
}
当初我学这个的时候也乱 自己画下图就明白了 .
跟我说说temp->Pre->Next和temp->Next->Pre是什么意思,
分开看 temp->pre ->Next 明白了吗?
有什么不同,另外temp->Next和temp->Pre是不是分别指向temp的下一个地址和前一个地址?
[解决办法]
[解决办法]
帮人帮到底
if(!First) //如果没有记录(此处是书上注释)。如同书上所说,实际上是:if(!First != NULL)
{
First=temp; //将temp赋给头结点。因为只有一个结点,又要变成环,所以该结点头尾都指向自己啦。
First->Next=First;
First->Pre=First; //环形链表(此处是书上的注释)
}
else
{
temp->Pre =First->Pre ; //环中不少于一个结点,将当前结点的前一个结点设置为头结点的前一个结点
temp->Next=First;//当前的结点的下一个结点指向头结点。
temp->Pre->Next=temp;//事实上就是First->Pre->Next = temp;
temp->Next->Pre=temp;//写到这里我都没有信心能让你搞懂,所以你最好把他们画出来。用一个个矩形表示结点,结点之间用箭头连起来。。
}