




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第二章线性表,线性表的逻辑结构线性表的顺序存储及实现线性表的链接存储及实现顺序表和单链表的比较线性表的其他存储及实现,本章的基本内容是:,2,线性表(LinearList):由n(n)个数据元素(结点)a1,a2,an组成的有限序列。其中数据元素的个数n定义为表的长度。当n=0时称为空表,常常将非空的线性表(n0)记作:(a1,a2,an)这里的数据元素ai(1in)只是一个抽象的符号,其具体含义在不同的情况下可以不同。例1、26个英文字母组成的字母表(A,B,C、Z)例2、某校从1978年到1983年各种型号的计算机拥有量的变化情况。(6,17,28,50,92,188),2.1线性表的逻辑结构,3,例3、学生健康情况登记表如下:,4,从以上例子可看出线性表的逻辑特征是:在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2;有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1;其余的内部结点ai(2in-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。,线性表的逻辑特征,5,ADT线性表的定义,线性表是一种典型的线性结构。数据的运算是定义在逻辑结构上的,而运算的具体实现则是在存储结构上进行的。抽象数据类型的定义为:P19,6,例2-1利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=AB。voidunion(Listif(!locateelem(La,e,equal)listinsert(La,+la-en,e),7,例2-2巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。此问题的算法如下:,8,voidmergelist(listla,listlb,list,9,while(I=I-1;j-)L.dataj+1=L.dataj;L.dataI-1=x;L.length+;,16,这里的问题规模是表的长度,设它的值为n。该算法的时间主要化费在循环的结点后移语句上,该语句的执行次数(即移动结点的次数)是n-i+1。由此可看出,所需移动结点的次数不仅依赖于表的长度,而且还与插入位置有关。当”插入”操作在表尾进行时,由于循环变量的终值大于初值,结点后移语句将不进行;这是最好情况,其时间复杂度O(1);当”插入”操作在表头进行时,结点后移语句将循环执行n次,需移动表中所有结点,这是最坏情况,其时间复杂度为O(n)。,算法的复杂度分析,17,由于插入可能在表中任何位置上进行,因此需分析算法的平均复杂度。在长度为n的线性表中第i个位置上插入一个结点,令Eis(n)表示移动结点的期望值(即移动的平均次数),则在第i个位置上插入一个结点的移动次数为n-I+1。故Eis(n)=pi(n-I+1)不失一般性,假设在表中任何位置(1in+1)上插入结点的机会是均等的,则p1=p2=p3=pn+1=1/(n+1)因此,在等概率插入的情况下,Eis(n)=(n-I+1)/(n+1)=n/2,18,也就是说,在顺序表上做插入运算,平均要移动表上一半结点。当表长n较大时,算法的效率相当低。虽然Eis(n)中n的的系数较小,但就数量级而言,它仍然是线性阶的。因此算法的平均时间复杂度为O(n)。,19,2、删除线性表的删除运算是指将表的第i(1in)结点删除,使长度为n的线性表:(a1,ai-1,ai,ai+1,an)变成长度为n-1的线性表(a1,ai-1,ai+1,an),20,算法2.VoiddeleteList(Sqlist,21,该算法的时间分析与插入算法相似,结点的移动次数也是由表长n和位置i决定。若I=n,则由于循环变量的初值大于终值,前移语句将不执行,无需移动结点;若I=1,则前移语句将循环执行n-1次,需移动表中除开始结点外的所有结点。这两种情况下算法的时间复杂度分别为O(1)和O(n)。删除算法的平均性能分析与插入算法相似。在长度为n的线性表中删除一个结点,令Ede(n)表示所需移动结点的平均次数,删除表中第i个结点的移动次数为n-i,故Ede(n)=pi(n-I)式中,pi表示删除表中第i个结点的概率。,算法的复杂度分析,22,在等概率的假设下,p1=p2=p3=pn=1/n由此可得:Ede(n)=(n-I)/n=(n-1)/2即在顺序表上做删除运算,平均要移动表中约一半的结点,平均时间复杂度也是O(n)。,23,小结:顺序存储方式的优缺点,优点:.在节点等长时可以随机存取。存储密度高,节省存储空间。用结点的物理次序反映结点之间的逻辑关系。缺点:插入和删除结点时需要移动大量的结点。必须静态分配连续的空间。,24,课堂练习,顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的存储地址是()。【解答】108在一个长度为n的顺序表的第i(1in+1)个元素之前插入一个元素,需向后移动()个元素,删除第i(1in)个元素时,需向前移动()个元素。【解答】n-i+1,n-i,25,当线性表采用顺序存储结构时,其主要特点是()。【解答】逻辑结构中相邻的结点在存储结构中仍相邻,26,作业,试写一个删除算法Voidelete_seq(Sqlist/pointer_1这个变量可以存放一个整型变量的地址。float*pointer_2;/pointer_2这个指针变量可以存放一个浮点型变量的地址。,30,指针变量的引用,两个运算符“int*pointer_1;a=100;pointer_1=运行结果:100100,*pointer_1=200,思考加入下列语句,得到什么结果?,32,结构体类型,定义一个结构体类型stu,这个结构体类型包括学号、姓名、成绩、家庭地址等四个数据项。,structstuintnum;charname20;floatscore;charaddr30;,可以用这个结构体类型来定义变量,例如structstustudent1,student2;,结构体类型名,结构体变量名,33,也可以在声明类型的同时定义变量,structstuintnum;charname20;floatscore;charaddr30;student1,student2;,结构体变量的引用,例1.student1.num=2011003;例2.printf(“%s”,)例3.scanf(“%d”,charname20;floatscore;structstudents1;structstudent*p;p=,执行结果:1001,John,98.5000001001,John,98.5000001001,John,98.500000,36,以下三种形式等价:结构体变量名.成员名(*p).成员名p-成员名例如,上面程序中s1.score,(*p).score,p-score是一样的。,37,用指针处理链表,举例:定义如下一个结构体类型:Structstudenti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全试题分类标准及答案
- 安全生产模拟试题及答案
- 安全考核试题及答案
- 2025年工业领域CCS技术应用案例深度解读报告
- 《编制说明-公安交通集成指挥平台数据共享技术规范》
- 中国动画课件下载网
- 淤血肝超声诊断
- 肝硬化患者的饮食护理
- 春节学生安全教育
- 红色教育基地分享
- 江苏省扬州市2024-2025学年四年级下学期6月数学期末试题一(有答案)
- (2025)发展对象培训考试题和答案
- 2024年西南医科大学招聘专职辅导员真题
- 2025年经济学基础理论考试试卷及答案
- 建筑施工项目支付流程及管理
- 保育师操作考试题及答案
- 精准教学的数据驱动模式
- 学校公务外出管理制度
- 天津市部分区2025年九年级下学期中考二模数学试卷(含详解)
- 2024年重庆开州区中医院招聘笔试真题
- 海外仓一件代发服务合同范本下载
评论
0/150
提交评论