线性表1(顺序表)_第1页
线性表1(顺序表)_第2页
线性表1(顺序表)_第3页
线性表1(顺序表)_第4页
线性表1(顺序表)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,线性结构的定义:,若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。可表示为:(a1,a2,an),简言之,线性结构反映结点间的逻辑关系是的。,特点只有一个首结点和尾结点;特点除首尾结点外,其他结点只有一个直接前驱和一个直接后继。,线性结构包括:线性表、堆栈、队列、字符串、数组等,其中最典型、最常用的是-,线性表,一对一(1:1),2,第2章线性表,2.1线性表的基本概念2.2线性表的顺序表示和实现2.3线性表的链式表示和实现2.4应用举例,3,2.1线性表的基本概念,、线性表它是一种最简单的线性结构。是一种可以在任意位置进行插入和删除数据元素操作的,由n(n0)个相同类型数据元素a0,a1,an-1组成的线性结构。,4,(a0,a1,ai-1,ai,ai1,,an-1),线性表的逻辑结构:,n=0时称为,数据元素,线性起点,ai的直接前趋,ai的直接后继,下标,是元素的序号,表示元素在表中的位置,n为元素总个数,即表长。n0,空表,线性终点,5,(A,B,C,D,Z),例2分析学生情况登记表是什么结构。,分析:数据元素都是同类型(记录),元素间关系是线性的。,分析:数据元素都是同类型(字母),元素间关系是线性的。,注意:同一线性表中的元素必定具有相同特性!,例1分析26个英文字母组成的英文表是什么结构。,6,.线性表抽象数据类型,它包括两个方面:数据集合:a0,a1,an-1ai的数据类型为DataType操作集合:(1)ListInitiate(L)初始化线性表(2)ListInsert(L,i,x)插入数据元素(3)ListLength(L)求当前数据元素个数(4)ListDelete(L,i,x)删除数据元素(5)ListGet(L,i,x)取数据元素等,7,3.线性表的存储结构,(1)顺序存储结构:它是使用一片地址连续的有限内存单元空间存储数据元素的一种计算机存储数据方法。特点:(任意两个在逻辑上相邻的数据元素在物理位置上也必然相邻)逻辑上相邻的元素,物理上也相邻。(2)链式存储结构:它是把数据元素和指针定义成一个存储体,使用指针把发生联系的数据元素链接起来的一种计算机存储数据方法。特点:任意两个在逻辑上相邻的数据元素在物理上不一定相邻,数据元素的逻辑次序是通过链中的指针链接实现的。,8,2.2线性表的顺序表示和实现,一、顺序表的存储结构二、顺序表的实现三、顺序表的运算效率分析,9,一、顺序表的存储结构表示,1、顺序表:用一组地址连续的存储单元依次存储线性表的各个数据元素。即采用顺序存储结构的线性表。它通常采用静态数组实现数据元素的存储。,可以利用数组Vn来实现,注意:在C语言中数组的下标是从0开始,即:Vn的有效范围是从V0Vn-1,10,(1)逻辑上相邻的数据元素,其物理上也相邻;(2)若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出(利用数组Vn的下标)。,设首元素a0的存放地址为LOC(a0)(称为首地址),设每个元素占用存储空间(地址长度)为L字节,则表中任一数据元素的存放地址为:LOC(ai+1)=LOC(ai)+LLOC(ai)=LOC(a0)+L*i,对上述公式的解释如图所示,2、线性表顺序存储特点:,11,地址内容元素在表中的位序,0,i,1,n-1,空闲区,i+1,L,b=LOC(a0),b+L,b+iL,b+(n-1)L,b+(MaxSize-1)L,LOC(ai)=LOC(a0)+L*i,3、线性表的顺序存储结构示意图,12,4、用C语言描述,typedefstructDateTypelistMaxSize;intsize;SeqList;/*MaxSize表示数组的最大元素个数,list表示顺序表的数组名,size表示顺序表中当前存储的数据元素个数,它必须满足sizeMaxSize,SeqList是该结构体的名字。*/,13,设有一维数组,下标的范围是到,每个数组元素用相邻的个字节存储。存储器按字节编址,设存储数组元素的第一个字节的地址是,则的第一个字节的地址是多少?,113,LOC(M3)=98+53=113,解:已知地址计算通式为:,LOC(ai)=LOC(a0)+L*i,例1,14,二、顺序表的实现(或操作),数据结构的基本运算:修改、插入、删除、查找、排序,1)修改通过数组的下标便可访问某个特定元素并修改之。,核心语句:Vi=x;,显然,顺序表修改操作的时间效率是O(1),15,在线性表(n个元素)的第i个位置前插入一个元素,实现步骤:将第n至第i位的元素向后移动一个位置;将要插入的元素写到第i个位置;表长加1。注意:事先应判断:插入位置i是否合法?表是否已满?,2)插入,16,intListInsert(SeqList*L,inti,DataTypex)intj;if(L-size=MaxSize)printf(“顺序表已满无法插入!n”);return0;elseif(iL-size)printf(“参数i不合法!n”);return0;elsefor(j=L-size;ji;j-)L-listj=L-listj-1;L-listi=x;L-size+;return1;,插入数据元素,17,在线性表的第i个位置前插入一个元素的示意图如下:,插入25,18,实现步骤:将第i+1至第n位的元素向前移动一个位置;表长减1。注意:事先需要判断,删除位置i是否合法?,删除线性表的第i个位置上的元素,for(j=i+1;jsize-1;j+)L-listj-1=L-listj;L-size-;return1;,/元素前移一个位置,/表长减1,核心语句:,3)删除,19,删除顺序表中某个指定的元素的示意图如下:,20,例:建立一个线性表,先依次输入数据元素1,2,3,4,10,然后删除,最后依次显示当前线性表中的数据元素。假设该线性的数据元素个数最坏情况下不会超过100个。实现方法:1、采用直接编写一个主函数实现。2、利用已设计实现的抽象数据类型模块。(存放在头文件名为SeqList.h中,通过#include“SeqList.h”),21,三、顺序表操作的效率分析,算法时间主要耗费在移动元素的操作上,因此计算时间复杂度的基本操作(最深层语句频度)T(n)=O(移动元素次数)而移动元素的个数取决于插入或删除元素的位置.,思考:若插入在尾结点之后,则根本无需移动(特别快);若插入在首结点之前,则表中元素全部要后移(特别慢);应当考虑在各种位置插入(共n+1种可能)的平均移动次数才合理。,时间效率分析:,22,推导:假定在每个元素位置上插入x的可能性都一样(即概率P相同),则应当这样来计算平均执行时间:将所有位置的执行时间相加,然后取平均。若在首结点前插入,需要移动的元素最多,后移n次;若在a1后面插入,要后移n-1个元素,后移次数为n-1;若在an-1后面插入,要后移1个元素;若在尾结点an之后插入,则后移0个元素;所有可能的元素移动次数合计:0+1+n=n(n+1)/2,故插入时的平均移动次数为:n(n+1)/2(n+1)n/2O(n),共有多少种插入形式?连头带尾有n+1种!,23,同理可证:顺序表删除一元素的时间效率为:T(n)=(n-1)/2O(n),插入效率:,删除效率:,教材有对执行效率的推导:,即插入、删除算法的平均时间复

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论