关于带表头的单链表的几个疑惑,请大家帮忙解答
一下是本参考书上的代码:
#include<stdio.h>
#include<stdlib.h>
struct Student //定义节点类型
{
char name[20];
float score;
Student *next;
};
struct StudentList //定义表头
{
Student *head;
Student *tail;
float averScore;
int unQualifiedStu;
int stuNum;
};
int main()
{
StudentList linkHead; //问题一:此处如果把linkHead 声明为一个指针(StudentList *linkHead)可以吗?
linkHead.head=linkHead.tail=NULL;
linkHead.averScore=0;
linkHead.unQualifiedStu=0;
Student *student;
while(1)//插入节点
{
student=new Student;
// 问题二:此处student是一个指针类型,为什么动态分派内存时不写成student=new Student*呢?
scanf("%s %f", student->name,&student->score);
if(student->score<0)
{
delete student;
break;
}
student->next=NULL;
if(linkHead.tail==NULL) //问题三:如果此处的判断条件改成if(linkHead.head==NULL)可以吗?
{
linkHead.head=student;
linkHead.tail=student;
}
else
{
linkHead.tail->next=student;
linkHead.tail=student;
}
linkHead.averScore+=student->score;
if(student->score<60)
linkHead.unQualifiedStu++;
linkHead.stuNum++;
}
linkHead.averScore=linkHead.averScore/linkHead.stuNum;
while(linkHead.head!=NULL)//问题四:如果此处的判断条件改成(linkHead.tail!=NULL)可以吗?有什么区别?
{
student=linkHead.head;
linkHead.head=student->next;
delete student;
}
}