鏈表插入示意圖:(圖是個人所畫)因為鏈表指針指來指去,難以理解,所以輔助畫圖更加方便。
定義的結構體:
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,*temp; // 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後面,輸入1 { fwrite(pointer,sizeof(struct student),1,fp); //先把1節點寫入文件 q = (struct student *)malloc(sizeof(struct student)); //開辟新節點內存 InputBox(stu.ID,11,"請輸入學生學號"); strcpy(q->ID,stu.ID); InputBox(stu.name,20,"請輸入學生姓名"); strcpy(q->name,stu.name); temp= pointer->next; //將原來的 1後面的數據 2 賦值給臨時temp結構體變量 pointer->next = q; //將q節點 賦值給 原來2的位置 pointer=pointer->next; //將q節點數據(pointer->next 等於q) 賦值給p 好讓p節點寫入文件 fwrite(pointer,sizeof(struct student),1,fp);//寫入輸入的q節點數據 pointer->next=temp; //將原來2位置的數據賦值到 p的下個節點(由於上個代碼p=p->next)p被賦值p->next 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; } }