版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳职业技术学院教案用纸第11周 总第34次 学时:2教学班级:软件专业各班 课程:C语言程序设计 授课教师:刘畅课题:链表上机操作教学方法:演示 教具:多媒体计算机教学目标:熟练掌握结构体以及结构体数组、指针及函数教学重点:链表的使用教学难点:链表的插入、删除、查找过程主要教学内容:链表的上机操作小结:课后回顾:沈阳职业技术学院教案用纸四个一:提问:结构体的三种定义方式导入:上节课我们学习了结构体的基本知识、结构体数组、结构体函数以及结构体
指针的相关知识,这节课我们通过习题巩固上节课学习的知识。正文:备注链表上机一一学生成绩管理系统、问题描述设计一个学生管理系统。该系统可以建立学生信息表,向表中插入新记录,删除某记录,或在表中查找某特定的学生信息。可输入一组学生成绩,包括每名学生的学号,姓名,语文、数学和英语成绩,建立学生成绩信息表。可加入新学生信息到学生成绩表中,或删除表中的某个位置的学生,或在表中查找某位置的学生并将该学生的信息显示出来。在主函数中设计一个菜单,将要进行的操作用0〜4来表示,允许用户输入相应的数字来进行反复操作。、数据结构其主要的数据类型为带头结点的单链表:typedefstructnode{intnumber;charname[20];intChinese,math,english;structnode *next;}LinkList;三、程序流程1.函数之间的调用关系图程序流程图如图12-1所示。/*学生的学号*//*姓名*//*语文、数学和英语成绩*/结构体基本知识的使用。如何使用结构体解决问题。图12-1 ”学生成绩管理系统”程序流程图2.主要函数(1)初始化链表:LinkLiSt*InitList()。(2)求链表长度:intLength_List(LinkLiSt*H)。(3)建立链表函数:VoidCreateLiSt(LinkLiSt*H,intn)。(4)表中元素定位函数:LinkLiSt*Locate(LinkList*H,intnum)。(5)查找表中元素位置函数:LinkLiSt*GetList(LinkList*H,inti)。(6)在链表中插入新元素函数:intInSLiSt(LinkLiSt*p,LinkListx)。(7)在给定位置i插入元素函数:intIns_List(LinkLiSt*H,inti,LinkListx)。(8)删除链表中的某元素函数:intDelLiSt(LinkLiSt*p,LinkList*x)。(9)删除链表中给定位置的元素函数:intDeLLiSt(LinkLiSt*H,inti,LinkList*x)。(10)主函数中的菜单显示函数:out()。(11)输出表中信息函数:voidDisLinkList(LinkList*H)。(12)主函数:main()。四、完整程序完整程序如下:#include"stdio.h"#include"string.h"typedefcharElemType;#defineOK 1#defineERROR0#defineOVER-1typedefstructnode{intnumber;charname[20];intChineSe,math,english;structnode*next;}LinkList;/*操作成功返回1*//*错误为0*//*结束为-1*//*学生学号*//*学生姓名*//*学生语文、数学和英语成绩*//*指向下一结点的指针*//*定义学生结点类型*/结构体是一种变量类型,我们可以定义各种类型的数组,当然也可以定义结构体的数组。/初始化链表/LinkList*InitList(){LinkList*H;/*申请一块LinkList类型的存储单元的操作,并将其地址赋值给头指针变量H*/H=(LinkLiSt*)malloc(sizeof(LinkList));H->next=NULL;return(H); /*头结点H指针域为空,表示空链表*/}/******************求链表长度*************************/int{Length_LiSt(LinkLiSt*H)LinkList*p;intj=0;P=H;While(P->next!=NULL){p=p->next;j++;}returnj;/*p指向链表的头结点*//*判断P所指结点后面是否为空*//*P向所指结点的后面移动*//*计数器值增1*//*计数器j的值为表长度*/}/*****************建立链表函数************************/voidCreateLiSt(LinkLiSt*H,intn){inti;LinkList*s,*last;charch;last=H;/*last始终指向尾结点,开始时指向头结点*/}for(i=1;i<=n;i++) /*循环输入各学生成绩*/{S=(LinkList*)malloc(sizeof(LinkList));/*生成新结点*/Printf("\n请输入第%~个学生的学号:",i);scanf("%d”,&s->number);Printf("\n请输入第%~个学生的姓名:",i);scanf("%s”,s->name);Printf("\n请输入第%~个学生的语文、数学和英语成绩:",i);
scanf("%d%d%d”,&s->chinese,&s->math,&s->english);s->next=NULL; /*将新结点的指针域为空*/last->next=s; /*将新结点插入表尾*/last=s; /*将last指针指向表尾*/}/*********************表中元素定位函数*******************/LinkList*Locate(LinkList*H,intnum){LinkList*p;p=H->next; /*p指向链表的第一个结点*/While(P!=NULL&&p->number!=num)p=p->next;returnp;}/查找表中元素位置函数/LinkList*GetList(LinkList*H,inti){LinkList*p;intj=0;p=H; /*p指向链表的头结点*/while(p->next!=NULL&&j<i){p=p->next;j++;}if(j==i) /*判断与给定的序号是否相等*/returnp;elsereturnNULL;}/******************在链表中插入新元素函数******************/intInsList(LinkList*p,LinkListx){LinkList*s;s=(LinkList*)malloc(sizeof(LinkList));s->number=x.number;strcpy(s->name,);s->chinese=x.chinese;s->math=x.math;s->english=x.english;s->next=p->next;p->next=s;returnOK;/*将数据放入新结点的数据域*//*将新结点的指针域与P结点后面元素相连*//*将新结点插入链表*/}/****************在给定位置i插入元素函数*****************/intIns_List(LinkList{LinkList*p;p=GetList(H,i-1);if(p!=NULL){InsList(P,x);returnOK;}*H,inti,LinkListx)/*调用按序号查找第i个元素地址p函数*//*判断查找的元素地址p是否存在*//*调用在已知结点P后插入结点算法函数*/结构体在指针中的应用。如何使用指针间接引用结构体中的数据。结构体指针作为函数如何传递数据。elsereturnERROR;}/*******************删除链表中的某元素函数*******************/int{DelList(LinkList*p,LinkList*x)LinkList*s;s=P->next;x->number=s->number;StrcPy(x->name,s->name);x->chinese=s->chinese;x->math=s->math;x->english=s->english;P->next=s->next;free(s);returnOK;/*s为要删除结点*//*将要删除的数据赋予指针变量X*//*将P结点的指针域与s结点后面元素相连*//*释放结点s*/}/*****************删除链表中给定位置的元素函数***************/int{Del_List(LinkList*H,inti,LinkList*x)LinkList*p;P=GetList(H,i-1);/*调用按序号查找第i-1个元素地址P函数*/if(p!=NULL&&p->next!=NULL) /*判断查找的元素地址P是否存在*/{DelLiSt(P,x);returnOK;}elsereturnERROR;/*调用删除已知结点p之后结点函数*/}/**********************主函数中的菜单显示********************/out(){Printf("∖n******************************************");Printf("∖n请输入序号(0-4)选择要进行的操作:");Printf("∖n0Printf("∖n1Printf("∖n2Printf("∖n3Printf("∖n4退出");建立一个学生信息表”);插入一个学生信息");删除一个学生信息”);查找一个学生是否在该学生信息表中”);Printf("∖n****************************************** ∖n");}/**********************输出表中信息函数********************/voidDiSLinkLiSt(LinkLiSt*H){LinkList*p;printf("∖n所有学生的信息如下:");printf("∖n学号姓名p=H->next;While(P!=NULL)语文数学英语∖n");{Printf("%2d%10s%9d%9d%9d∖n",P->number,P->name,P->chinese,P->math,P->english);P=P->next;}}/******************主函数****************************/main(){LinkList*H,*P,*q,x;inti,n,menux,flag,num;clrscr(); /*清屏*/out();H=InitList();scanf("%d”,&menux);do{switch(menux) /*用来判断用户要进行何种操作*/{Case0:exit(0);break;/*退出*//*建立一个学生信息表*/Printf("\n请输入要生成的学生信息表的元素个数:");scanf("%d",&n);CreateList(H,n);Printf("\n建立的学生信息表为:\n");DisLinkList(H);break;/*在学生信息表中插入一个元素*/Printf("\n请输入要插入的学生位置");scanf("%d",&i);Printf("\n请输入要插入的学生信息:");Printf("\n请输入学生的学号:");scanf("%d",&x.number);Printf("\n请输入学生的姓名:");scanf("%s",);Printf("\n请输入学生的语文、数学和英语成绩:");scanf("%d%d%d",&x.chinese,&x.math,&x.english);flag=Ins_List(H,i,x);if(flag){ Printf("\n插入后的学生信息表为:");DisLinkList(H);}break;/*在学生信息表中删除一个元素*/Printf("\n请输入要删除的学生的位置:");scanf("%d",&i);flag=Del_List(H,i,&x);if(flag){printf("\n删除第%d个学生后,表中信息为:",i);DisLinkList(H);}break;/*在学生信息表中查找某学号学生信息*/Printf("\n请输入查找的学生学号:\n");scanf("%d",&num);if((q=Locate(H,num))!=NULL){printf("\n在学生信息表中存在着学号为%d的学生!,num);printf("\n学号姓名语文数学英语\n");Printf("%2d%10s%9d%9d%9d",q->number,q->name,q->chinese,q->math,q->english);}elseprintf("\n在学生信息表中不存在着学号为%d的学生!,num);break;default:printf("\n输入选项错误,请重新输入(0-4)!");}out();scanf("%d”,&menux);}while(1);}五、程序运行步骤及结果说明:程序运行自动显示的信息无下画线,用户输入的信息用下画线显示,“/”表示回车。本程序有主菜单,设有0〜4五个选项,每次可以输入0〜4来执行相关操作,并且每次执行完后都会重新显示菜单,当输入。时结束该程序。程序一次运行结果如下: 请输入序号(0-4)选择要进行的操作:0 退出建立一个学生信息表插入一个学生信息删除一个学生信息4 查找一个是否在该学生信息表中1/请输入要生成的学生信息表的元素个数:2/请输入第1个学生的学号:1/请输入第1个学生的姓名:liu/请输入第1个学生的语文、数学和英语成绩:788889/请输入第2个学生的学号:2/请输入第2个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度路面标线涂料研发与生产合同
- 二零二四年度旧房翻新工程安全规范合同
- 二零二四年度汽车制造租赁合同
- 地役权合同范本(2篇)
- 印刷合同范本(2篇)
- 双方解除合作协议书(2篇)
- 劳动争议劳动关系和解协议书范本(2篇)
- 二零二四年度版权许可合同标的舞台剧改编权与使用条件
- 建筑模板班组分包协议书
- 门窗配件合同范本
- GB 17762-2022耐热玻璃器具的安全要求
- 大班社会活动《我们的地球》课件
- 四象限时间管理表模板
- (完整版)附:《档案目录清单》
- 千年之忧-回眸范仲淹和庆历新政
- 版式设计网格课件
- 河道保洁服务投标方案(完整技术标)
- 中小学校(幼儿园)伙食费审批表
- 刘力红思考中医
- 机电保安制度
- 产品报价单(5篇)
评论
0/150
提交评论