void lianbiao(struct student *head) { FILE *fp; struct student *p1, *q1; q1 = head; if ((fp = fopen("duli16.3.dat", "r")) == NULL) { printf("File open error!\n"); return; } while (1) { p1 = (struct student *)malloc(sizeof(struct student)); if((fscanf(fp, "%s %s %lf", p1->num, p1->name, &p1->money)) ==-1){ break; }; // printf("%s\n",p1->num); p1->next = NULL; q1->next = p1; q1 = p1; } q1->next = NULL; fclose(fp); // printf("111\n"); }
时间: 2024-01-17 07:06:17 浏览: 38
这段代码定义了一个函数 `lianbiao`,其参数是一个名为 `head` 的指向 `struct student` 类型的指针。
函数首先打开了一个名为 `duli16.3.dat` 的文件,如果文件打开失败,则输出错误信息并退出函数。
接下来,函数进入一个无限循环,每次循环都会动态分配一个 `struct student` 类型的内存,并从文件中读入该结构体的三个成员变量 `num`、`name` 和 `money`,读入成功后会将该结构体插入到链表中,最后将指向链表尾部的指针 `q1` 指向新插入的结构体。
当读取文件结束时,跳出循环并关闭文件。
注释掉的 `printf` 函数可以用来调试代码。
相关问题
lianbiao反转
链表反转是一种常见的数据结构操作,它可以将链表中的节点顺序进行颠倒。反转链表的主要思想是通过改变节点之间的指针关系来实现。下面我将简要介绍一下链表反转的实现过程。
首先,我们需要定义一个辅助指针变量,用于表示当前节点。初始时,将该指针指向链表的第一个节点。
然后,我们需要定义两个额外的指针变量,分别表示当前节点的前一个节点和后一个节点。初始时,将前一个节点指针设为null,将后一个节点指针设为当前节点的下一个节点。
接下来,我们需要进行循环操作,直到当前节点为null。在每一次循环中,我们需要进行以下几个步骤:
1. 将当前节点的下一个节点指针指向前一个节点。
2. 将前一个节点指针指向当前节点。
3. 将当前节点指针指向后一个节点。
最后,我们需要将链表的头节点指针指向原链表的最后一个节点,即将链表反转完成。
需要注意的是,在进行上述操作时,为了保证链表的完整性,我们需要先将链表的头节点指针保存起来,在最后进行更新。
链表反转是一种常用的操作,可以在实际编程中起到很大的作用。掌握链表反转的实现方法,对于处理链表相关的问题具有重要的意义。
阅读全文