您的位置:首页 > 编程语言 > C语言/C++

C语言中怎么将文件里的数据创建到(读到)链表中?

2015-09-03 15:35 351 查看
定义的结构体:

struct student
{
char ID[11]; //学生学号
char name[20];  //学生姓名

struct student *next;  //next 指针 指向 struct  student 类型的变量
}stu;


创建文件:

void Create_File_List()
{
FILE *fp;
if ((fp = fopen("student.txt","rb"))==NULL)                 /*如果此文件不存在*/
{
if ((fp = fopen("student.txt","wb+"))==NULL)
{
outtextxy(220, 200, "无法建立文件!");

}
}
}


写入文件信息:

/***************

函数功能:录入出勤学生

/***************/

void add_student(  )
{
FILE *fp;
fp=fopen("student.txt","a+");
strcpy(stu.ID,"");// 与链表head结点 无数据 有关
strcpy(stu.name,"");
fwrite(&stu,sizeof(struct student),1,fp);
InputBox(stu.ID,11,"请输入学生学号");
outtextxy(380,200,stu.ID);
Sleep(500);
InputBox(stu.name,20,"请输入学生姓名");
outtextxy(380,250,stu.name);
Sleep(500);
fwrite(&stu,sizeof(struct student),1,fp);
fclose(fp);
}


这里值得注意的是:写入文件的时候,开始时要事先写入第一个数据,这里写入的空数据,这与链表head处数据为空有关。

从已经写入的文件中读到链表中:

/***************

函数功能:创建链表

/***************/
struct student * CreateList()
{
struct student *pointer,*head,*q;//head指针为链表的头结点,是找到链表的唯一依据,如果head指针丢失,那么整个链表就找不到了;p指针总是指向新申请的结点;q指针总是指向尾节点
struct student temp;//定义结构体别名
FILE *fp;
pointer=(struct student *)malloc(sizeof(struct student ));  // p指向新开辟的节点内存
head = pointer;    //开辟头结点内存      头结点中没有学生成绩信息
q = pointer;       //开辟尾节点内存   q指针总是指向尾节点
q->next = NULL; // //标志链表的结束 尾节点的特点是next成员的值为NULL,它是最后一个节点,作为链表结束的标志,NULL是一个符号常量表示值为0的地址
fp=fopen("student.txt","rb");
while(fread(&temp,sizeof(struct student),1,fp)!=0)//从文件中读结构体块
{      pointer=(struct student*)malloc(sizeof(struct student)); // p指向新开辟的节点内存
strcpy(pointer->ID,temp.ID);
strcpy(pointer->name,temp.name);
q->next=pointer;  //把新节点挂到原尾节点之后
q=q->next;  //q指针指向新的尾节点
}
q->next=NULL;//标志链表的结束
fclose(fp);
return head;
}


从链表中输出打印到屏幕中数据:

/***************

函数功能:
输出链表
返回:指向链表表头的指针

/***************/

void Print_List(struct student *head)
{
struct student* pointer;
pointer=head->next; //跳过无数据的头结点
while(pointer!=NULL)
{
outtextxy(x,y,pointer->ID);
outtextxy(x,y,pointer->name);
pointer=pointer->next;//指向下一个节点
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: