版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <stdlib.h>#include <stdio.h>#include <string.h>/单链表的定义/数据元素的类型typedef struct LNode /声明结点的类型和指向结点的指针类型/int stuid;char name20;float english;float math;float database;float sum;float average;struct LNode *next; /指示结点地址的指针/LNode,*LinkList;/函数1.输入学生信息,逆向建立单链表LinkList Input()int
2、 i,n;LinkList L,p;L=(LinkList)malloc(sizeof(LNode);L->next=NULL; /建立一带头结点的空单链表/单链表初始化结束printf("请输入要输入的学生个数:n");scanf("%2d",&n);/逆序建立for(i=n;i>0;i-)printf("*n");printf("* 请输入第%d个学生的信息 *n",i);printf("*n");p=(LinkList)malloc(sizeof(LNode); /生成
3、新结点/printf("请输入学生的学号:");scanf("%d",&p->stuid);printf("请输入学生的姓名:");scanf("%s",p->name);printf("请输入学生的英语成绩:");scanf("%f",&p->english);printf("请输入学生的高数成绩:");scanf("%f",&p->math);printf("请输入学生的数据
4、结构成绩:");scanf("%f",&p->database);p->sum=p->english+p->math+p->database;p->average=p->sum/3;p->next=L->next;L->next=p; /把新结点插入到链表头部return L;/函数2.显示学生信息void Display(LinkList L)LinkList p;p=L->next;/ L为头指针p指向第一个结点if(L=NULL)printf("请先输入数据n");
5、elseprintf("所有同学信息如下:n");printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");while(p)printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);p=p->next;/函数3.插入单个学生到表头void Insert(LinkList L)LinkList p;p=(L
6、inkList)malloc(sizeof(LNode);/p指向要插入的结点printf("请输入学生的学号:");scanf("%d",&p->stuid);printf("请输入学生的姓名:");scanf("%s",p->name);printf("请输入学生的英语成绩:");scanf("%f",&p->english);printf(" 请输入学生的高数成绩:");scanf("%f",&a
7、mp;p->math);printf("请输入学生的数据结构成绩:");scanf("%f",&p->database);p->sum=p->english+p->math+p->database;p->average=p->sum/3;p->next=L->next;/将p插入 L 中L->next=p;printf("插入成功!");/函数4.删除某个学生/要知道要删除的这个结点的前一个结点的位置void Delete(LinkList L)LinkList
8、 p,q;int num,ch;char s20;if(L=NULL)printf("请先输入数据n");elsep=L; /L是头结点的头指针,最后p指向要删除的结点的前一个位置q=p->next; /q指向p的下一个结点,即最后指向要删除的结点printf("1.按姓名删除n2.按学号删除n请选择:");scanf("%d",&ch);if(ch=1)printf("请输入姓名:");scanf("%s",s);while(strcmp(q->name,s)!=0&
9、;&q->next!=NULL)p=q;q=q->next;if(strcmp(q->name,s)=0) /q指向的结点要被删除,p指向要删除的结点的前一个位置p->next=q->next;printf("被删除学生的信息如下:n");printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",q->stuid,q->name,q->sum,q->average,
10、q->english,q->math,q->database);free(q); /释放要删除的结点qelseprintf("没有该学生的信息n");/按姓名删除elseprintf("请输入要删除学生的学号:");scanf("%10d",&num);while(q->stuid!=num&&q->next!=NULL)p=q;q=q->next;if(q->stuid=num) /q指向的结点要被删除,p指向要删除的结点的前一个位置p->next=q->
11、next;printf("被删除学生的信息如下:n");printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",q->stuid,q->name,q->sum,q->average,q->english,q->math,q->database);free(q); /释放要删除的结点qelseprintf("没有该学生的信息n");/按学号删除/有学生信息/函数5.
12、顺序查找某个学生void Search(LinkList L)LinkList p;int num,ch;char sn20;p=L->next;if(!L)printf("请先输入数据n");elseprintf("1.按学号查找n2.按姓名查找n请选择:");scanf("%d",&ch);if(ch=1)printf("请输入要查找学生的学号:n");scanf("%10d",&num);while(p&&p->stuid!=num)p=p-&g
13、t;next;if(p->stuid=num)printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);elseprintf("没有该学生的信息n");/按学号查找ch=1elseprintf("请输入要查找学生的姓名:n");
14、scanf("%s",sn);while(p&&strcmp(p->name,sn)!=0)p=p->next;if(strcmp(p->name,sn)=0)printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);e
15、lseprintf("没有该学生的信息n");/按姓名查找ch=2/有数据/函数6.显示各科最高分void Max(LinkList L)LinkList p1=L->next,p2=L->next,p3=L->next;float max1=0,max2=0,max3=0;printf(" *n");printf(" * 显示各科最高分 *n");printf(" *n");/英语最高分for(p1;p1->next!=NULL;p1=p1->next)if(p1->engli
16、sh>p1->next->english)max1=p1->english;elsemax1=p1->next->english;/数学最高分for(p2;p2->next!=NULL;p2=p2->next)if(p2->math>p2->next->math)max2=p2->math;elsemax2=p2->next->math;/数据结构最高分for(p3;p3->next!=NULL;p3=p3->next)if(p3->database>p3->next->
17、;database)max3=p3->database;elsemax3=p3->next->database;printf(" 英语 :t%6.1fn",max1);printf(" 高数 :t%6.1fn",max2);printf(" 数据结构:t%6.1fn",max3);/函数7.各科平均分void Average(LinkList L)float ave1,ave2,ave3,i=0;float english1=0,math1=0,database1=0;LinkList p;p=L->next;
18、if(!L)printf("请先输入数据");while(p!=NULL)i+;english1=english1+p->english;math1= math1+ p->math;database1=database1+ p->database;p=p->next;ave1=english1/i;ave2=math1/i;ave3=database1/i;printf("*n");printf(" * 各科平均分的统计 *n");printf("*nn");printf("tt英
19、语t高数t数据结构n");printf("t平均分:%6.1ft%6.1ft%6.1fn",ave1,ave2,ave3);/函数0.退出void tuichu()printf("t*谢谢使用*n");exit(0);/函数8.排序void Sort(LinkList L)LinkList p,q,r;int ch1,ch2,dd1,i,j,count=0;float dd2;if(!L)printf("请先输入数据");elseprintf("1.直接插入排序t2.冒泡排序t3.直接选择排序n请选择:"
20、);scanf("%d",&ch1);switch (ch1)case 1:/L是带头结点的单链表printf("1.按学号排序n2.按英语成绩排序t3.按高数成绩排序n4.按数据结构成绩排序t5.按总分排序n请选择:");scanf("%d",&ch2);switch (ch2)case 1:p=L->next->next;/p指向第一结点的后继L->next->next=NULL;/直接插入排序,第一元素有序,从第二元素起依次插入while(p!=NULL)r=p->next;/暂存p
21、的后继q=L;while(q->next!=NULL&&q->next->stuid<p->stuid)/查找插入位置q=q->next;/将P结点链入链表p->next=q->next;q->next=p;p=r;break;case 2:p=L->next->next;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&&q->next->english<p->en
22、glish)q=q->next;p->next=q->next;q->next=p;p=r;break;case 3:p=L->next->next;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&&q->next->math<p->math)q=q->next;p->next=q->next;q->next=p;p=r;break;case 4:p=L->next->nex
23、t;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&&q->next->database<p->database)q=q->next;p->next=q->next;q->next=p;p=r;break;case 5:p=L->next->next;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&am
24、p;&q->next->sum<p->sum)q=q->next;p->next=q->next;q->next=p;p=r;break;/switch(ch2)break;case 2:p=L->next;while(p)count+;p=p->next;printf("1.按学号排序n2.按英语成绩排序t3.按高数成绩排序n4.按数据结构成绩排序t5.按总分排序n请选择:");scanf("%d",&ch2);switch (ch2)case 1:for(i=0;i<c
25、ount-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->stuid>p->next->stuid)dd1=p->stuid;p->stuid=p->next->stuid;p->next->stuid=dd1;p=p->next;break;case 2:for(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->english>p->next->english)dd2=p-
26、>english;p->english=p->next->english;p->next->english=dd2;p=p->next;break;case 3:for(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->math>p->next->math)dd2=p->math;p->math=p->next->math;p->next->math=dd2;p=p->next;break;case 4:fo
27、r(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->database>p->next->database)dd2=p->database;p->database=p->next->database;p->next->database=dd2;p=p->next;break;case 5:for(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->sum>p-&
28、gt;next->sum)dd2=p->sum;p->sum=p->next->sum;p->next->sum=dd2;p=p->next;break;/switch(ch2)break;case 3:/直接选择排序一趟找出一个关键字最小的结点,其数据和当前结点进行交换;/若要交换指针,需记下当前结点和最小结点的前驱指针p=L->next;printf("1.按学号排序n2.按英语成绩排序t3.按高数成绩排序n4.按数据结构成绩排序t5.按总分排序n请选择:");scanf("%d",&ch
29、2);switch (ch2)case 1:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->stuid<r->stuid)r=q;q=q->next;if(r!=p)dd1=r->stuid;r->stuid=q->stuid;q->stuid=dd1;p=p->next;/while(p)break;case 2:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->english<r->englis
30、h)r=q;q=q->next;if(r!=p)dd2=r->english;r->english=q->english;q->english=dd2;p=p->next;/while(p)break;case 3:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->math<r->math)r=q;q=q->next;if(r!=p)dd2=r->math;r->math=q->math;q->math=dd2;p=p->next;/while(p)break; case 4:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->database<r->database)r=q;q=q->next;if(r!=p)dd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度河北交通职业技术学院单招数学考前冲刺试卷【综合卷】附答案详解
- 社交媒体营销策略规划及操作指南
- 2024-2025学年度河北省单招考试一类 《文化素质数学》过关检测试卷(重点)附答案详解
- 2024-2025学年中级软考试题预测试卷附参考答案详解(综合卷)
- 2024-2025学年南通职业大学单招《数学》高频难、易错点题及一套完整答案详解
- 2024-2025学年医师定期考核每日一练试卷附完整答案详解【典优】
- 2024-2025学年度执业药师考试黑钻押题附参考答案详解AB卷
- 2024-2025学年度专升本测试卷附参考答案详解【B卷】
- 2024-2025学年度环境影响评价工程师之环境影响评价相关法律法规试题附答案详解(黄金题型)
- 2026中信集团招聘面试题及答案
- 2025届成都二诊化学试卷
- 代孕协议样本
- 2025年江苏省职业院校技能大赛中职组(水利工程制图与应用)参考试题库及答案
- 消防水系统培训资料
- 2024中考病句训练及解析
- 学习通《科研诚信与学术规范》课后及考试答案
- 《化工设备机械基础(第8版)》完整全套教学课件
- 医院培训课件:《雷火灸疗法》
- 中小学苦难辉煌读书分享主题班会 名著导读 读书分享 主题教育模板
- 第四章 人员招聘课件
- GB/T 20001.1-2024标准起草规则第1部分:术语
评论
0/150
提交评论