




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.专业.专注.僚北疙库工如于院HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY数据结构实验报告实验项目实验一实验类别基础篇学生姓名宋大超学生学号201501149完成日期2016-10-9指导教师实验成绩评阅日期评阅教师word可编辑实验一线性表基本操作的编程实现棋验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可 以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大 部分功能。还鼓励学生利用基
2、本操作进行一些更实际的应用型程序设计。棋验性质1验证性实验(学时数:2H)棋验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。注意事项】1 .开发语言:使用Co2 .可以自己增加其他功能。棋验分析,说明过程】本次实验主要是检验单链表数据的插入与删除。实验的第一部分是要求将学生 e的信息插入到第i个学生的前面,也就是在两个节点之间建立新的节点。我们此次实验有两个要求 。A个是将一个新的学生信息插入到原来的学生信息当中去 。第二个要求是要删除一个学生的信息 。以下我将通过示意图和文字
3、的 方式说明这次实验的完成方法。需要说明的是此处的i表示学生信息的一个序号元素 。在第i个学生信息插入时,就得把第i个学生之后的所有节点依次向后移动一个位置。在将新白节点X插入到第i的位置。1Stu12Stu23Stu34Stu4nStun1Stu12Stu23Stu34Stu45enStun如上图所示,例如将学生e的信息插入到第五个位置。我们先将指针指向最舟-个位置 ,由于要插入一个 新的节点,原来数组的长度发生了变化 。数据的存储空间位置也随之发生了变化 ,为此,我们将最舟-个 节点向后移动,利用for循环将第五个节点之后的依次向后移动 ,直到所有的元素都向后移动了一位 。对于顺序链表的删
4、除工作实际上与其插入工作相反 ,只需要将表中第i+1个到第n个节点的所用兀素 依次向后移动一个位置 。1Stu12Stu23Stu34Stu45Stu51Stu12Stu23Stu44Stu5如上图所举例的那样,当我们删除第三个元素是,第三个元素后面的元素依次向前移动了一位。我们可以直接找到第i个元素后面的位置将其向前移动一个。思考题】一:线性表的顺序存储和链表存储的差异?优缺点分析?答:1、差异:线性表的顺序存储的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需预先分配,它是静态分配内存。顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,也就是说事
5、先对MaxSize ”要有合适的设定,设定过大会造成存储空间的费,过小造成溢出。因此,当对线性表的长度或存储规模难以估计时,不宜采用顺序表。线性表的链表存储是在逻辑上相邻的数据元素,物理存储位置不一定相邻,它使用指针实现元素之间的逻辑关系。并且,链表的存储空间是动态分配的。链表的动态分配则可以克服需要预先设定空间大小的缺点。链表不需要预留存储空间,也不需要知道表长如何变化 ,只要内存空间尚有空闲,就可以再程序运 行时随时地动态分配空间,不需要时还可以动态回收。因此,当线性表的长度变化较大或者难以估计其存储规模时,宜采用动态链表作为存储结构。2、优缺点:线性表的顺序存储优点:方法简单,如数组,容
6、易实现。不用为表示节点间的逻辑关系而增加额外的存储开销。顺序表具有按元素序号随机访问的特点。线性表的顺序存储缺点:在顺序表中做插入、删除操作时,移动表中的大量元素,因此对n较大的顺序表效率 低。,需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。线性表的链式存储优点:插入、删除运算方便,只需调整指针的指向即可 。(2能够动态分配内存,不需要预选分配好空间,能更加有效率的利用空间资源 。线性表的顺序存储缺点:每次访问链表时只能从头节点开始,不能做到随机访问。要占用额外的存储空间存储元素之间的关系,存储密度降低。二、哪些操作引发了数据的移动 ?答:数
7、据的插入、删除、排序、归并等。三、算法的时间效率是如何体现的?答:通过时间频度和时间复杂度来体现的。四、链表的指针是如何后移的?如何加强程序的健壮性?答:(1)假如指针p指向某个结点,那么p=p-next ;就可以使指针后移,就是把p所指向结点 的指针域的值重新给指针 p。(2)增加程序的容错控制;算法尽量避免一些隐患错误 ;降低时间复杂度;尽量少执行一 些复杂的操作;提高算法的效率等。澳验小结】一、重难点对于我来说由于基础不够扎实,所以最难理解应该是此次实验里面关于length的理解,我觉得此次实验的关于数据的插入与删除算法上的理解很容易,也简单。主要是关于其中的length有很多不明白的地
8、方。最开始定义的时候int型。而这里的length既可以作为一种指针,也可以作 为一种长度,及相当于数组的下标。只要理解了 length ,整个实验就好做了 。二、心得与体会由于基本功不扎实,导致在做实验的时候遇到很多的困难,好在在之后的询问中,也大概理解了之前的问题。通过这次实验,使我对C语言相关知识理解更加透彻明了 ,特别是对指针、结构 体的理解使我见识到指针的强大与灵活性。以前在C语言上的欠债我觉得我会补起来的。三、收获我觉得此次最大的收获就是关于结构体指针的理解。结构体指针的应用太广泛了,几乎贯穿整个数据结构的全本书,所以,对于指针的理解和应用非常重要 。为此我将不懈努力学好 C语言这
9、 门课。澳验代码】#include#include#include#define MAXSIZE 100 /根据需要自己设定一个班级能够容纳的最大学生数typedef struct stuint num;/学生学号char name10; 学生姓名float score; / 学生成绩STUDENT;/存放单个学生信息的结构体类型typedef struct listSTUDENT stuMAXSIZE;/存放学生的数组定义,静态分配空间int length;/记录班级实际学生个数LIST;/存放班级学生信息的顺序表类型void listcreate(LIST *Li,int m)/初始化班级
10、的学生信息/m为该班级的初始人数int i;Li-length=0;for(i=1;istui.num);printf(姓名:);scanf(%s,L);printf(成绩:);scanf(%f,&Li-stui.score);Li-length+;int listinsert(LIST *Li,int i)int j;STUDENT e;if(Li-length=MAXSIZE-1)printf(无更多的存储空间!n);return 0;输入第i个学生的学号/输入第i个学生的姓名/输入第i个学生的成绩/学生人数加1/将学生插入到班级Li的第i个位置。/插入一个学生信息/
11、测试存储空间是否被占满if (i=Li-length+2)插入位置检验,如果错误就返回0退出程序。printf(插入位置有误!n);return 0;elseprintf(请输入插入的学生信息:n);printf(学号:);scanf(%d,&e.num);printf(姓名:);scanf(%s,);printf(成绩:);scanf(%f,&e.score);for( j=Li-length; j=i 卜)Li-stuj+1=Li-stu j; 利用for循环将第i个及其后面的元素依次往后移动Li-stui =e ;/移开位置后将学生e放入到i位置Li-length+ ;/完成
12、插入后,学生实际人数加1return 1;int listdel(LIST *Li,int i)/删除一个学生信息删除第i个学生的信息if (iLi-length)return 0;else删除位置检验,如果错误就返回0退出程序。for(;ilength;i+)往前移动Li-stu i=Li-stu i+1;Li-length-return 1;/利用for循环将准备删除的第i个及其后面的元素依次删除第i个学生后,学生人数减1void listdisplay(LIST L)/显示所有学生信息int i;/printf(班级学生信息如下:n);printf( 学号 姓名 成绩n);for(i=1
13、;i=L.length;i+)printf(%10d%10s%10.2fn,L.stui.num,L.,L.stui.score);void showmenu()/显示菜单printf(欢迎使用成绩管理小软件n);printf(t1 、创建学生信息n);printf(t2 、插入学生信息n);printf(t3 、删除学生信息n);printf(t4 、显示学生信息n);printf(t5 、退出程序 n);void main()int no,stu_count,pos;LIST stu_info;while(1)showmenu();printf( 请输入你的选择:);sc
14、anf(%d,&no);switch(no)case 1: printf(班级信息初始化,按任意键继续n);getch();printf(请输入班级学生原始人数:);scanf(%d,&stu_count);listcreate(&stu_info,stu_count);system(cls);showmenu();listdisplay(stu_info);n);printf(班级信息初始化已经完成,按任意键继续getch();system(cls);break;case 2:printf(插入前班级信息:n);listdisplay(stu_info);printf(请输入插入位置:);scanf(%d,&pos);listinsert(&stu_info,pos);printf(插入后班级信息:n);listdisplay(stu_info);printf(插入已经完成,按任意键继续n);getch();system(cls);break;case 3:printf(删除前班级信息:n);listdisplay(stu_info);printf(请输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字仿真计算机合作协议书
- 2025届安徽省蒙城二中高考考前提分化学仿真卷含解析
- 2025年LNG工艺包及装置项目发展计划
- 幼儿园冬奥会知识竞赛
- 小学生也需要普法教育
- 深度解析《GBT 43877-2024铁矿石 同化性能测定方法》
- 隆林各族自治县2024-2025学年数学四下期末达标检测试题含解析
- 雅安职业技术学院《党中央在延安十三年与延安精神》2023-2024学年第二学期期末试卷
- 青岛三中2025届高三下学期1月第一次联合考试化学试题含解析
- 青岛工程职业学院《传染病学(含小儿)A》2023-2024学年第一学期期末试卷
- 物业品质巡查管理制度
- 高中物理-《互感与自感》课件-新人教版选修3
- 养殖林麝合作协议书模板
- 钢铁项目环评报告 - 2工程分析
- 旅行社安全教育培训制度
- DL 5190.2-2019 电力建设施工技术规范 第2部分:锅炉机组
- 股权转让确认函
- 2024年助产专科护士理论考核试题及答案
- 中考数学专题复习《代数推理题》知识点梳理及典例讲解课件
- 项目工作分解结构(EPC项目)
- APQP各阶段资料清单
评论
0/150
提交评论