c语言链表从本地文件中读取和写入数据

 1 typedef struct Data{
 2  40     char *name;
 3  41     char *IDCARD;
 4  42     char *job_id;
 5  43     char *length;
 6  44     char *education;
 7  45     char *marriage;
 8  46     int local;
 9  47 }Data;
10  48    
11  49 typedef struct node{                                             
12  50     Data *data;
13  51     struct node *next;
14  52     struct node *prior;
15  53 }node;
16  54      
17  55 typedef struct doublelist{
18  56     node *head;
19  57     node *tail;
20  58     size_t size;                                                        
21  59 }doublelist;
22  60  
 1  void inserttail2(node *newnode)                                         
 2 126 {    
 3 127     if(list->size == 0){
 4 128         list->tail = newnode;
 5 129         list->head = newnode;
 6 130     }  
 7 131     else{
 8 132         newnode->prior = list->tail;
 9 133         list->tail->next = newnode;
10 134         list->tail = newnode;
11 135     }  
12 136     list->size++;
13 137 }    
14  void SaveInformation()
15 380 {   
16 381     node *temp = list->head;
17 382     FILE *file = fopen("staff_information.txt","w");//进行追加写
18 383     if(file == NULL){
19 384         return;
20 385     }
21 386     else{
22 387         while(temp != NULL){
23 388             fprintf(file,"%s\t\t",temp->data->name);
24 389             fprintf(file,"%s\t\t",temp->data->IDCARD);
25 390             fprintf(file,"%s\t\t",temp->data->job_id);
26 391             fprintf(file,"%s\t\t",temp->data->length);
27 392             fprintf(file,"%s\t\t",temp->data->education);
28 393             fprintf(file,"%s\n\n",temp->data->marriage);
29 394             temp = temp->next;
30 395         }
31 396         fclose(file);
32 397     }
33 398 }   
34 399     
35 400 void ReadInformation()
36 401 {   
37 402     node *temp = list->head;
38 403     FILE *file = fopen("staff_information.txt","r");
39 404     if(file == NULL){
40 405         return;
41 406     }
42 407     else{
43 408         while(!feof(file)){
44 409             node *newnode = creat_node();//此函数返回值就为一个新节点,这行代码大家可以不用在意
45 410             fscanf(file,"%s\t\t",newnode->data->name);
46 411             fscanf(file,"%s\t\t",newnode->data->IDCARD);
47 412             fscanf(file,"%s\t\t",newnode->data->job_id);                
48 413             fscanf(file,"%s\t\t",newnode->data->length);
49 414             fscanf(file,"%s\t\t",newnode->data->education);
50 415             fscanf(file,"%s\t\t",newnode->data->marriage);
51 416             inserttail2(newnode);//t头插法插入节点
52 417         }
53 418         fclose(file);
54 419     }
55 420     return;
56 421 }   

附上creat_node代码原型

 1 node *creat_node(){
 2  12     node *newnode;
 3  13     newnode = (node *)malloc(sizeof(node));
 4  14     newnode->data = (Data *)malloc(sizeof(Data));
 5  15     if(newnode->data != NULL){
 6  16         newnode->data->name = (char *)malloc(50 *sizeof(char));
 7  17         newnode->data->IDCARD= (char *)malloc(50 *sizeof(char));
 8  18         newnode->data->job_id = (char *)malloc(50 *sizeof(char));
 9  19         newnode->data->length = (char *)malloc(50 *sizeof(char));
10  20         newnode->data->education = (char *)malloc(50 *sizeof(char));
11  21         newnode->data->marriage = (char *)malloc(50 *sizeof(char));
12  22     }
13  23     newnode->prior = NULL;
14  24     newnode->next = NULL;
15  25     return newnode;
16  26 }//创建一个新结点

大家照这个模板来就能解决大家的问题,顺式结构其实也几乎一样,希望能帮大家解决问题。

 

上一篇:单链表的增删查改


下一篇:网络流 Newnode's pdf 题解