/*11.023数组s存储了n个人的信息。写一函数,求这n个人中年龄最大(即出生日期最小者的姓名。*/char*oldest(students[],intn){intj,k=0;for(j=1;jn-1;j++){if(s[k].birth.years[j].birth.year)k=j;elseif(s[k].birth.year==s[j].birth.year){if(s[k].birth.months[j].birth.month)k=j;elseif(s[k].birth.month==s[j].birth.month)if(s[k].birth.days[j].birth.day)k=j;}}returns[k].name;}/*11.033链表L存储了多个人的信息。写一函数,求这些人中年龄最大(即出生日期最小)者的名字。结构体类型定义如下:structdate{intyear;intmonth;intday;};//日期结构体类型structstudentNode//链表结点的结构体类型{charname[10];//人名structdatebirth;//出生日期structstudentNode*next};*/char*oldest(structstudentNode*L)/*若L是空表,则返回空指针null否则返回表中年龄最大者的名字*/{structstudentNode*p;if(L==NULL)returnNULL;for(p=L-next;p!=NULL;p=p-next){if((*p).birth.year(*L).birth.year)continue;if((*p).birth.year==(*L).birth.year){if((*p).birth.month(*L).birth.month)continue;if((*p).birth.month==(*L).birth.month&&(*p).birth.day=(*L).birth.day)continue;}L=p;}return((*L).name);}/*11.063结构体类型定义如下:structcourse{intcID;//课程号,取值0~99charname[10];//课程名floatcredit;//学分,取值0~5intsemester;//学期,取值1~8};结构体数组c存储了n门课程的信息。写一函数,求学期s的总学分。*/floatcreditSum(structcoursec[],intn,ints){inti;floatsum=0.0;for(i=0;in;i++)if(c[i].semester==s)sum+=c[i].credit;returnsum;}/*11.073课程链表结点的结构体类型定义如下:structcourseNode//课程链表结点的结构体类型{intcID;//课程号,取值0~99charname[10];//课程名floatcredit;//学分,取值0~5intsemester;//学期,取值1~8structcourseNode*next;};结构体链表Lc存储了各学期多门课程的信息。写一函数,求学期s的总学分。*/floatcreditSum(structcourseNode*Lc,ints)/*若Lc是空表,则返回0;否则返回学期s的总学分*/{structcourseNode*p;floatsum=0.0;if(Lc==NULL)return0.0;for(p=Lc-next;p!=NULL;p=p-next)if((*p).semester==s)sum+=(*p).credit;if(s==1)sum+=(*Lc).credit;returnsum;}/*11.133日期和结构体类型定义如下:structdate{intyear;intmonth;intday;};//日期结构体类型structstudent//结构体类型{charname[10];//人名structdatebirth;//出生日期};结构体数组s存储了n个人的名字和出生日期。写一函数,由数组s中n个人的信息及其顺序构造相应的链表。链表的结点的结构体类型定义如下:structstudentNode//结构体类型{charname[10];//人名structdatebirth;//出生日期structstudentNode*next};*/#defineNsizeof(structstudentNode)structstudentNode*CreateLinkList(structstudents[],intn){structstudentNode*head,*p1,*p2;inti=0;p1=p2=(structstudentNode*)malloc(N);head=NULL;while(in){strcpy(p1-name,s[i].name);p1-birth=s[i].birth;if(i==0)head=p1;elsep2-next=p1;p2=p1;p1=(structstudentNode*)malloc(N);++i;}p2-next=NULL;return(head);}/*11.173课程链表结点的结构体类型定义如下:structcourseNode//课程链表结点的结构体类型{intcID;//课程号,取值0~99charname[10];//课程名floatcredit;//学分,取值0~5intsemester;//学期,取值1~8structcourseNode*next;};结构体链表Lc存储了多门课程的信息。写一函数,将课程号为c的课程的学分修改为t。*/structcourseNode*creditChange(structcourseNode*Lc,intc,floatt)/*若课程c不存在,则修改不成功,返回null;否则修改该课程的学分为t,返回指向该课程结点的指针。*/{structcourseNode*Lc2;while(Lc!=NULL){if(Lc-cID==c)Lc-credit=t,Lc2=Lc;Lc=Lc-next;}return(Lc2);}//11.183课程链表结点的结构体类型定义如下://structcourseNode//课程链表结点的结构体类型//{intcID;//课程号,取值0~99//charname[10];//课程名//floatcredit;//学分,取值0~5//intsemester;//学期,取值1~8//structcourseNode*next;//};//结构体链表Lc存储了多门课程的信息。写一函数,将课程号为c的课程结点删除。////要求实现下列函数:structcourseNode*deleteCourse(structcourseNode**Lc,intc)/*若在链表Lc中课程c不存在,则删除不成功,返回null;否则从链表Lc中删除该课程结点,并返回指向该课程结点的指针。*/{structcourseNode*p,*q,*t;p=*Lc;while(c!=p-cID&&p-next!=NULL){q=p;p=p-next;}if(c==p-cID){if(p==*Lc){t=p;*Lc=p-next;}else{t=p;q-next=p-next;}}return(t);}/**********11.302单向链表的结点类型定义如下:structnode{charch;structnode*next;};编写函数,对单向链表L实现就地逆置,即将所有结点的指针反向,原链头当作链尾,原链尾当作链头,并返回逆置后链表的头指针。**********/structnode*inverse(structnode*L){structnode*p=L,*q;intn=0,i=0;chart;while(p!=NULL){p=p-next;++n;}p=L;for(;in-1;i++){while(p!=NULL){q=p-next;if((p-ch)(q-ch)){t=p-ch,p-ch=q-ch,q-ch=t;}if(q-next!=NULL)p=p-next;elsep=NULL;}p=L;}returnL;}/**********11.352单向链表的结点类型定义如下:structnode{charch;structnode*next;};编写函数,对单向链表L实现排序,即按结点的ch值,从小到大重构链表L,并返回排序后的链表的头指针。**********/structnode*sorting(structnode*L)/*对单向链表L实现从小到大排序,并返回重构后的链表的头指针。*/{structnode*p=L,*q;intn=0,i=0;chart;while(p!=NULL){p=p-next;++n;}p=L;for(;in-1;i++){while(p!=NULL){q=p-next;if((p-ch)(q-ch)){t=p-ch,p-ch=q-ch,q-ch=t;}if(q-next!=NULL)p=p-next;elsep=NULL;}p=L;}returnL;}