C语言:文件链表操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计的目的和要求
目的:用链表对数据进行操作
要求:
读一个文件把各记录读入链表各结点中;对链表进行添加\删除操作;把链表的每个结点元素存储在该文件中.
课程设计任务内容
题1.
读一个文件把各记录读入链表各结点中;对链表进行添加\删除操作;把链表的每个结点元素存储在该文件中.
程序流程图
开始
读取文件记录
菜单选择
1.打印链表(print()函数)
2.删除链表元素(deletes()函数)
3.插入链表元素(insert()函数)
4.结束
开 始
P=head
P~尾节点
结束
输出p 指向的节点
P 指向下一个节点
是表尾?
开 始
P=head
P~尾节点
结束
输出p 指向的节点
P 指向下一个节点
是表尾?
P1=head P0=stud
原链表为空
P0所指节点 为唯一节点
P0->num>p1->num &p1不是表尾节点
P2->p1 p1向后移一个节点
P0->num <=p1->num
P1->next =p0
p0->next =NULL
P1->h ead P2->next=p0 p0->next=p1
Head=p0 P0->next =p1
软件使用说明:
1)通过菜单函数选择使用的功能;
2)调用对应的功能函数对链表进行操作;
3)结束操作后,链表文件重新写入新的文件夹。
心得体会:
链表学得不够扎实,各种自定义的函数操作还好,但建立主函数时,读取文件将文件中数据存入链表经常出错。同时在进行将操作后的文件数据写入新的文件时,刚开始一直只能存入一组数据。
链表这章的适用性很强,用户操作方便。
源代码:
#include
#include
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
void instraction(void );
void print(struct student *head);
struct student *del(struct student *head,long num);
struct student *insert(struct student
*head,struct student *stud);
void writefile(struct student *head);
main()
{
struct student *head,*stu;
long delnum;
struct student *new1=(struct student *) malloc(LEN);
struct student *p1,*p2;
int n=0,choice;
FILE *fp;
if((fp=fopen("compute112.txt","r+"))==NU LL)
{
printf("file cannot opened!\n");
}
p1=p2=(struct student *) malloc(LEN);
fscanf(fp,"%d%f",&(new1->num),&(new1->score));
head=NULL;
p1->num=new1->num;
p1->score=new1->score;
while(new1->num!=0)
{
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *) malloc(LEN);
fscanf(fp,"%d%f",&(new1->num),&(new1->score));
p1->num=new1->num;
p1->score=new1->score;
}
p2->next=NULL;
fclose(fp);
start: instraction();
scanf("%d",&choice);
while(choice != 4)
{
if(choice == 1)
{
print(head);
}
else if(choice == 2)
{
printf("输入要删除的学号:");
scanf("%ld",&delnum);
head=del(head,delnum);
print(head);
printf("\n\n");
}
else if(choice==3)
{
printf("输入要插入的学号成绩:");
stu=(struct student *)malloc(LEN);
scanf("%ld%f",&stu->num,&stu->score);
head=insert(head,stu);
print(head);
printf("\n\n");
}
goto start;