C语言:文件链表操作

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档