动态链表存入学生信息
时间: 2023-07-10 12:26:45 浏览: 94
好的,我可以为您解答关于动态链表存储学生信息的问题。
首先,动态链表是一种数据结构,可以动态地分配内存来存储数据,而不需要事先知道存储数据的数量。在存储学生信息时,我们可以定义一个学生信息结构体,例如:
```
typedef struct student
{
char name[20];
int age;
char gender[10];
char major[30];
struct student *next;
} Student;
```
其中,name、age、gender、major 分别表示学生的姓名、年龄、性别和专业,next 表示指向下一个节点的指针。
接着,我们可以定义一个头指针,来指向链表的头节点:
```
Student *head = NULL;
```
然后,我们可以编写一个函数,用于向链表中添加新的学生信息。该函数可以按照学生的姓名的字典序顺序来插入节点,以方便后续的查找和排序。例如:
```
void insertStudent(Student **head, char name[], int age, char gender[], char major[])
{
Student *newStudent = (Student *)malloc(sizeof(Student)); // 动态分配内存
strcpy(newStudent->name, name);
newStudent->age = age;
strcpy(newStudent->gender, gender);
strcpy(newStudent->major, major);
newStudent->next = NULL;
if (*head == NULL) // 如果链表为空,则将新节点作为头节点
{
*head = newStudent;
}
else if (strcmp(name, (*head)->name) < 0) // 如果新节点的姓名小于头节点的姓名,则将新节点作为头节点
{
newStudent->next = *head;
*head = newStudent;
}
else // 否则,按照姓名的字典序顺序插入节点
{
Student *p = *head;
while (p->next != NULL && strcmp(name, p->next->name) >= 0)
{
p = p->next;
}
newStudent->next = p->next;
p->next = newStudent;
}
}
```
最后,我们可以编写一个函数,用于遍历链表,并输出每个节点的学生信息:
```
void printStudent(Student *head)
{
Student *p = head;
while (p != NULL)
{
printf("Name: %s\n", p->name);
printf("Age: %d\n", p->age);
printf("Gender: %s\n", p->gender);
printf("Major: %s\n", p->major);
printf("\n");
p = p->next;
}
}
```
这样,我们就可以使用动态链表来存储学生信息了。
阅读全文