struct stud node *Create_Stu Doc()int num,score; name[20];char int size=sizeof(struct stud node);struct stud node *head,*tail, *p;head=tai1=NULL: printf("Input num,name and score; n");scanf(%d%s%d",&num, name,&score);while(num!=0) p=(struct stud_node*)malloc(size);tail=p为什么要这样
时间: 2024-04-21 17:29:33 浏览: 12
这段代码的目的是动态创建一个链表,每次读入一个学生的信息,就创建一个新的节点,并将它插入到链表末尾。变量`size`表示节点的大小,使用`malloc`函数动态分配内存空间。`head`和`tail`分别指向链表的头和尾。`p`是一个临时指针,用于创建新的节点。
在代码中,先读入一个学生的信息,并将其保存在变量`num`、`name`、`score`中。然后,使用`malloc`函数分配一个大小为`size`的内存空间,将其地址赋值给`p`。接着,将新节点插入到链表末尾,即将`tail`的`next`指针指向新节点`p`,并将`tail`更新为新节点`p`,最后再次读入学生信息,直到`num`为0,退出循环。
这样做的好处是可以动态创建链表,节约内存空间,同时可以灵活地插入、删除、修改节点。
相关问题
struct stud node *Create_Stu Doc()int num,score; name[20];char int size=sizeof(struct stud node);struct stud node *head,*tail, *p;head=tai1=NULL: printf("Input num,name and score; n");scanf(%d%s%d",&num, name,&score);while(num!=0) p=(struct stud_node*)malloc(size);
这段代码的作用是创建一个链表,并从标准输入读入一系列学生的信息,将它们插入到链表中。下面是每一行代码的作用:
1. `int num, score;`定义变量`num`和`score`,分别表示学生的学号和成绩。
2. `char name[20];`定义字符数组`name`,表示学生的姓名。
3. `int size = sizeof(struct stud_node);`定义变量`size`,表示链表节点的大小,使用`sizeof`运算符计算得到。
4. `struct stud_node *head, *tail, *p;`定义指针变量`head`、`tail`和`p`,分别表示链表的头指针、尾指针和临时指针。
5. `head = tail = NULL;`将`head`和`tail`指针初始化为`NULL`,表示链表为空。
6. `printf("Input num, name and score: ");`输出提示信息,提示用户输入学生信息。
7. `scanf("%d%s%d", &num, name, &score);`读入学生信息,分别保存到`num`、`name`和`score`变量中。
8. `while (num != 0)`进入循环,如果`num`不等于0,则表示还有学生信息需要读入。
9. `p = (struct stud_node*)malloc(size);`使用`malloc`函数动态分配一块大小为`size`的内存空间,用于存储新节点。
10. `tail = p;`将`tail`指向新节点,表示新节点为链表的最后一个节点。
11. 读入下一个学生信息,继续循环。
这样,就可以动态地创建一个链表,并将一系列学生信息插入到链表中了。
输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。 提示: 定义函数struct stud_node *Creat_Stu_Doc()完成创建链表 定义函数struct stud_node *DeleteDoc(struct stud_node *head,int min_score)将分数低于min_score的结点删除 定义函数void Ptrint_Stu_Doc(struct stud_node *head)打印链表 输入输出示例:括号内为说明,无需输入输出
输入:
101 zhangsan 89
102 lisi 78
103 wangwu 92
104 zhaoliu 85
0
输入需要输出的最低成绩:90
输出:
103 wangwu 92
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stud_node {
int num;
char name[20];
int score;
struct stud_node *next;
};
struct stud_node *Creat_Stu_Doc() {
struct stud_node *p, *head=NULL;
int num, score;
char name[20];
scanf("%d", &num);
while (num != 0) {
scanf("%s %d", name, &score);
p = (struct stud_node*)malloc(sizeof(struct stud_node));
p->num = num;
strcpy(p->name, name);
p->score = score;
p->next = head;
head = p;
scanf("%d", &num);
}
return head;
}
struct stud_node *DeleteDoc(struct stud_node *head, int min_score) {
struct stud_node *p, *pre;
p = head;
while (p != NULL) {
if (p->score < min_score) {
if (p == head) {
head = p->next;
} else {
pre->next = p->next;
}
free(p);
p = pre->next;
} else {
pre = p;
p = p->next;
}
}
return head;
}
void Print_Stu_Doc(struct stud_node *head) {
struct stud_node *p;
p = head;
while (p != NULL) {
printf("%d %s %d\n", p->num, p->name, p->score);
p = p->next;
}
}
int main() {
struct stud_node *head;
int min_score;
head = Creat_Stu_Doc();
scanf("%d", &min_score);
head = DeleteDoc(head, min_score);
Print_Stu_Doc(head);
return 0;
}