现有结构体定义如下:
struct stuInfo
{
char id[12]; //数据成员
char name[15];
float score;
struct stuInfo *next; //指针成员
};
任务及要求:
(1)首先完成线性链表的定义和创建,确保链表的第一个节点为哨兵节点,不存放有效的数据;
(2)利用文件的相关操作,动态开辟节点存储空间,将存放在磁盘某个路径中的文件“stuinfo.txt”信息逐条读入,并依次存入到线性链表的每个节点中,信息如下;
00001 张三 100
00002 李四 99
00003 王五 100
00004 王六 89
00005 江涛 98
00006 陈琪 88
00007 祁廷 91
(3)接下来,将学号为‘00004’的节点删除;
(4)再接下来,利用冒泡排序,对链表继续升序排序;
(5)将完整的线性链表信息从头到尾依次存储到磁盘某个路径下的“score.txt”文件中,存储格式和“stuinfo.txt”文件相同。
(6)最终将“score.txt”的内容复制粘贴到实验报告的实验结果中。
struct stuInfo
{
char id[12]; //数据成员
char name[15];
float score;
struct stuInfo *next; //指针成员
};
struct stuInfo *head = NULL;
struct stuInfo * create()
{
FILE *fp = fopen("student.txt","r");
if(fp == NULL)
return NULL;
struct stuInfo *p;
p = head = (struct stuInfo *)malloc(sizeof(struct stuInfo));
char buf[100];
while(fgets(buf,100,fp))
{
struct stuInfo * q = (struct stuInfo *)malloc(sizeof(struct stuInfo));
sscanf(buf,"%s %s %f",q->id,q->name,&q->score);
q->next = NULL;
p->next = q;
p = q;
}
fclose(fp);
return head;
}
void del()
{
printf("请输入需要删除的学号:");
char id[12];
scanf("%s",id);
struct stuInfo * p = head->next;
struct stuInfo * prev = p;
while(p != NULL)
{
if(strcmp(p->id,id) == 0)
{
prev->next = p->next;
free(p);
return;
}
prev = p;
p = p->next;
}
}