编写一条学生链表,写一些能够像链表里边添加数据的函数 实现:将链表中的所有内容保存到文件中去 以及 读取文件中的所有内容,加载到链表里面
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef struct link
{
union
{
char *data;
int len;
};
struct link* next;
}link,*link_p;
link_p create()
{
link_p p=(link_p)malloc(sizeof(link));
if(p==NULL)
return NULL;
p->next=NULL;
p->len=0;
return p;
}
void insert_head(link_p p, char *data)
{
if(p==NULL)
return;
link_p q=(link_p)malloc(sizeof(link));
q->data=data;
q->next=p->next;
p->next=q;
p->len++;
// printf("插入成功\n");
}
void show(link_p p)
{
link_p q=p->next;
while(q!=NULL)
{
printf("%s->",q->data);
q=q->next;
}
puts("NULL");
}
int main(int argc, const char *argv[])
{
link_p P=create();
char *str1="hello";
char *str2="world";
insert_head(P,str2);
insert_head(P,str1);
show(P);
FILE *fp1=fopen(argv[1],"w");
FILE *fp2=fopen(argv[2],"r");
if(fp1==NULL||fp2==NULL)
{
printf("文件打开失败\n");
return 1;
}
link_p Q=P->next;
while(Q!=NULL)
{
fprintf(fp1,"%s ",Q->data);
Q=Q->next;
}
printf("数据保存完成,请查看文件1\n");
int res=1;
while(res>0)
{
char *s=NULL;
res=fscanf(fp2,"%s",s);
if(s!=NULL)
insert_head(P,s);
}
printf("文件2加载完成\n");
show(P);
fclose(fp1);
fclose(fp2);
return 0;
}