鏈表插入示意圖:(圖是個人所畫)因為鏈表指針指來指去,難以理解,所以輔助畫圖更加方便。
定義的結構體:
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;
}
}