链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便。
定义的结构体:
struct student { char ID[11]; //学生学号 char name[20]; //学生姓名 struct student *next; //next 指针 指向 struct student 类型的变量 }stu;
看我写的代码,代码中有详细解释:
/*************** 函数功能: 插入出勤学生 返回:指向链表表头的指针 /***************/ void insert_message(struct student* head) { FILE* fp; //定义文件指针 struct student* pointer,*q ; // p指针指向新节点 q指向插入节点的地方 fp=fopen("student.txt","wb+"); pointer=head->next;//跳过头结点 指向下一个节点 InputBox(stu.ID,11,"请输入要插入哪个学号后面"); while(pointer!=NULL) { if(strcmp(pointer->ID,stu.ID)==0) //假设输入1 { fwrite(pointer,sizeof(struct student),1,fp); //先把1节点写入文件 pointer=pointer->next;// 要插入到1后面,要指向1的下一个节点 q = (struct student *)malloc(sizeof(struct student)); /* 生成新结点q */ InputBox(stu.ID,11,"请输入学生学号"); strcpy(q->ID,stu.ID); InputBox(stu.name,20,"请输入学生姓名"); strcpy(q->name,stu.name); q->next = pointer->next; // 把p->next->next节点赋值给q节点(插入的节点)的下一个节点 pointer->next = q; //把新节点赋值给1的下一个节点(1的后面) pointer=pointer->next; //p总是指向新的节点 while(pointer!=NULL) {fwrite(pointer,sizeof(struct student),1,fp); //将其他各节点遍历写入文件 pointer=pointer->next; } fclose(fp); outtext("插入学生成功!"); } fwrite(pointer,sizeof(struct student),1,fp); //事先开始遍历节点写入文件 pointer=pointer->next; } }
时间: 2024-10-25 19:33:19