马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1:头脑导图
2:将 student.c这个练习题,改成链表后实现
头文件link.h
- #ifndef __STRUCT_H__
- #define __STRUCT_H__
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct Student{
- char name[20];
- double math;
- double chinese;
- double english;
- double physical;
- double chemical;
- double biological;
- }student;
- typedef struct node
- {
- union
- {
- student data;
- int len;
- };
- struct node *next;
- }link,*linkptr;
- //创建链表
- linkptr create_link();
- //创建节点
- linkptr create_node(student arr[],linkptr H);
- //插入
- void insert(student arr[],int n,linkptr H);
- //将链表的信息保存到文件中
- void save(linkptr H,const char *filename);
- //读取文件,写入数组
- void load(linkptr H,const char *filename,student brr[]);
- //展示信息
- void show(linkptr H);
- //修改数学成绩
- void setMath(linkptr H,const char *filename);
- //释放链表
- void myfree(linkptr H);
- #endif
复制代码 源文件link.c
- #include "link.h"
- //创建链表
- linkptr create_link()
- {
- linkptr H=(linkptr)malloc(sizeof(link));
- if(NULL==H)
- {
- printf("申请头结点失败!\n");
- return NULL;
- }
- H->len=0;
- H->next=NULL;
- return H;
- }
- //创建节点
- linkptr create_node(student arr[],linkptr H)
- {
- linkptr p=(linkptr)malloc(sizeof(link));
- if(NULL==p)
- {
- printf("创建节点失败!\n");
- return NULL;
- }
- p->data=arr[H->len];
- p->next=NULL;
- return p;
- }
- //插入
- void insert(student arr[],int n,linkptr H)
- {
- if(NULL==H)
- {
- printf("插入失败!\n");
- return;
- }
- linkptr q=H;
- for(int i=0;i<n;i++)
- {
- while(q->next)
- {
- q=q->next;
- }
- linkptr p=create_node(arr,H);
- p->next=q->next;
- q->next=p;
- H->len++;
- }
- }
- //将链表的信息保存到文件中
- void save(linkptr H,const char *filename)
- {
- FILE* fp=fopen(filename,"w");
- linkptr q=H;
- while(q->next)
- {
- q=q->next;
- fprintf(fp,"%s %lf %lf %lf %lf %lf %lf\n",q->data.name,q->data.math,q->data.chinese,q->data.english,q->data.physical,q->data.chemical,q->data.biological);
- }
- fclose(fp);
- }
- //读取文件,写入数组
- void load(linkptr H,const char *filename,student brr[])
- {
- int i=0;
- FILE* fp=fopen(filename,"r");
- linkptr q=H;
- while(q->next)
- {
- q=q->next;
- fscanf(fp,"%s %lf %lf %lf %lf %lf %lf\n",brr[i].name,&brr[i].math,&brr[i].chinese,&brr[i].english,&brr[i].physical,&brr[i].chemical,&brr[i].biological);
- i++;
- }
- fclose(fp);
- }
- //展示信息
- void show(linkptr H)
- {
- linkptr q=H;
- while(q->next)
- {
- q=q->next;
- printf("姓名=%s\n",q->data.name);
- printf("数学=%lf\n",q->data.math);
- printf("语文=%lf\n",q->data.chinese);
- printf("英语=%lf\n",q->data.english);
- printf("物理=%lf\n",q->data.physical);
- printf("化学=%lf\n",q->data.chemical);
- printf("生物=%lf\n",q->data.biological);
- printf("-------------------\n");
- }
- }
- //修改数学成绩
- void setMath(linkptr H,const char *filename)
- {
- int i=1;
- linkptr q=H;
- while(q->next)
- {
- double num=0;
- q=q->next;
- printf("请输入第%d个同学的数学成绩\n",i);
- scanf("%lf",&num);
- q->data.math=num;
- i++;
- }
- save(H,filename);
- }
- //释放链表
- void myfree(linkptr H)
- {
- linkptr q=H;
- while(q->next)
- {
- while(q->next)
- {
- q=q->next;
- }
- free(q);
- q=NULL;
- }
- free(H);
- H=NULL;
- }
复制代码 测试文件main.c
- #include "link.h"
- int main(int argc, const char *argv[])
- {
- student arr[3]={{"lisi",99,77,55,78,67,66},
- {"wangwu",90,67,78,45,23,99},
- {"xiaol",67,45,99,78,56,90}};
- student brr[3]={0};
- linkptr H=create_link();
- insert(arr,3,H);
- save(H,"1.txt");
- load(H,"1.txt",brr);
- show(H);
- setMath(H,"filename");
- show(H);
- return 0;
- }
复制代码 代码截屏
测试效果
- 姓名=lisi
- 数学=99.000000
- 语文=77.000000
- 英语=55.000000
- 物理=78.000000
- 化学=67.000000
- 生物=66.000000
- -------------------
- 姓名=wangwu
- 数学=90.000000
- 语文=67.000000
- 英语=78.000000
- 物理=45.000000
- 化学=23.000000
- 生物=99.000000
- -------------------
- 姓名=xiaol
- 数学=67.000000
- 语文=45.000000
- 英语=99.000000
- 物理=78.000000
- 化学=56.000000
- 生物=90.000000
- -------------------
- 请输入第1个同学的数学成绩
- 12
- 请输入第2个同学的数学成绩
- 23
- 请输入第3个同学的数学成绩
- 34
- 姓名=lisi
- 数学=12.000000
- 语文=77.000000
- 英语=55.000000
- 物理=78.000000
- 化学=67.000000
- 生物=66.000000
- -------------------
- 姓名=wangwu
- 数学=23.000000
- 语文=67.000000
- 英语=78.000000
- 物理=45.000000
- 化学=23.000000
- 生物=99.000000
- -------------------
- 姓名=xiaol
- 数学=34.000000
- 语文=45.000000
- 英语=99.000000
- 物理=78.000000
- 化学=56.000000
- 生物=90.000000
- -------------------
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |