程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中鏈表任意位置怎麼插入數據?然後寫入文件中?,插入

C語言中鏈表任意位置怎麼插入數據?然後寫入文件中?,插入

編輯:關於C語言

C語言中鏈表任意位置怎麼插入數據?然後寫入文件中?,插入


鏈表插入示意圖:(圖是個人所畫)因為鏈表指針指來指去,難以理解,所以輔助畫圖更加方便。

 

 

定義的結構體:

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;
}  
 
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved