文件操作:打开文件“class.text",建立一个链表A,存储学生的信息(姓名、学号、成绩)。学生信息需要手动输入,建立链表时需要建立学生信息结点的存储结构,而且链表要按照学习成绩的高低顺序输入,保存关闭文件。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char name[10];
char no[10];
int grade;
} student;
typedef struct LNode
{
student stdinfo;
LNode *next;
} LNode, *LinkList;
void initList(LinkList &L)
{
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
}
void ListInsert(LinkList &L, student std)
{
if (L->next == NULL)
{
// 头结点后无指针,直接插入
LNode *p = (LNode *)malloc(sizeof(LNode));
p->stdinfo = std;
p->next = NULL;
L->next = p;
}
else
{
// 头结点不为空,由低到高插入结点
LNode *p = L;
LNode *pre;
while (p != NULL && p->stdinfo.grade < (std.grade))
{
pre = p;
p = p->next;
}
LNode *s = (LNode *)malloc(sizeof(LNode));
s->stdinfo = std;
s->next = p;
pre->next = s;
}
}
void printStdinfo(LinkList L)
{
FILE *ofn = fopen("student.txt", "w");
LNode *p = L;
while (p->next != NULL)
{
p = p->next;
fprintf(ofn, "%s %s %d\n", p->stdinfo.name, p->stdinfo.no, p->stdinfo.grade);
}
fclose(ofn);
}
int main()
{
LNode *L;
initList(L);
student std;
do
{
scanf("%s %s %d", &std.name, &std.no, &std.grade);
ListInsert(L, std);
} while (getchar() != '#');
printStdinfo(L);
return 0;
}
文件名和链表名随便取的,成绩由低到高排序
运行结果:
生成的文件内容: