数据结构第2章线性表链表部分课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构第2章线性表链表部分课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 表链 部分 课件
- 资源描述:
-
1、4/27/2023 1第第2 2章章 表表 学习要点学习要点:理解表是由同一类型的元素组成的有限序列的概念。理解表是由同一类型的元素组成的有限序列的概念。熟悉定义在抽象数据类型表上的基本运算。熟悉定义在抽象数据类型表上的基本运算。掌握实现抽象数据类型的一般步骤。掌握实现抽象数据类型的一般步骤。掌握用数组实现表的步骤和方法。掌握用数组实现表的步骤和方法。掌握用指针实现表的步骤和方法。掌握用指针实现表的步骤和方法。掌握用间接寻址技术实现表的步骤和方法。掌握用间接寻址技术实现表的步骤和方法。掌握用游标实现表的步骤和方法。掌握用游标实现表的步骤和方法。掌握单循环链表的实现方法和步骤。掌握单循环链表的实
2、现方法和步骤。掌握双链表的实现方法和步骤。掌握双链表的实现方法和步骤。熟悉表的搜索游标的概念和实现方法。熟悉表的搜索游标的概念和实现方法。学生成绩登记表学生成绩登记表姓姓 名名英语英语数据结构数据结构高数高数学号学号丁一丁一9678870101李二李二8790780102张三张三6786860103孙红孙红6981960104王冬王冬8774660105线性结构的特点 国贸学院 8522105工商学院 8523150计算机学院 8521088会计学院 8525789统计学院 8528136 外语学院 8523026 例:“最后一个”数据元素 直接前驱 直接后继 存在唯一一个被称作“第一个”的数
3、据元素;存在唯一一个被称作“最后一个”的数据元素;除第一个之外的数据元素均只有一个直接前驱;除最后一个之外的数据元素均只有一个直接后继。数据元素的 有限集 4/27/2023 42.1 ADT2.1 ADT表表(List)(List)2.1.1 ADT表的表的数据模型数据模型 表是由表是由n(n 0)个同一类型个同一类型(通常记为通常记为 datatype类型类型)的元素的元素(结点结点)a(1),a(2),a(n)组成的有限序列。组成的有限序列。1.有限性有限性:线性表中数据元素的个数是有穷的。:线性表中数据元素的个数是有穷的。2.相同性相同性:线性表中数据元素的类型是同一的。:线性表中数据
4、元素的类型是同一的。3.顺序性顺序性:线性表中相邻的数据元素:线性表中相邻的数据元素ai-1和和ai之间存在之间存在序偶关系序偶关系(ai-1,ai),即,即ai-1是是ai的前驱,的前驱,ai是是ai-1的后继;的后继;a1 无前驱,无前驱,an无后继,其它每个元素有且仅有一个前无后继,其它每个元素有且仅有一个前驱和一个后继。驱和一个后继。2.1.2 有关的概念与术语有关的概念与术语 表的长度(表的长度(Length):表的元素的个数即数据模型中的):表的元素的个数即数据模型中的n。空(空(Empty)表:)表:n=0的表。的表。表中元素表中元素(结点结点)的的位置(位置(Position)
5、:当:当n 1时,说时,说k是表中是表中第第 k个元素个元素a(k)的位置,的位置,k=1,2,n。表中元素表中元素(结点结点)的前驱的前驱:当:当n1时,说时,说a(k)是是a(k+1)的前驱的前驱 (k=1,2,n-1)。表中元素表中元素(结点结点)的后继:当的后继:当n1时,说时,说a(k+1)是是a(k)的后继的后继(k=1,2,n-1)。非空表非空表记为:记为:L(a1,a2,ai-1,ai,an)a1a3a4ana24/27/2023 72.1 ADT2.1 ADT表(表(ListList)2.1.3 ADT表的逻辑特征表的逻辑特征非空表有且仅有一个开始元素非空表有且仅有一个开始元
6、素a(1),它没有前驱。,它没有前驱。当当n1时,它有一个后继时,它有一个后继a(2)。非空表有且仅有一个结束元素非空表有且仅有一个结束元素a(n),它没有后继。,它没有后继。当当n1时,它有一个前驱时,它有一个前驱a(n-1)。当当n2时,表的其余元素时,表的其余元素a(k)(2 k n-1)都有一个都有一个前驱和一个后继。前驱和一个后继。表中元素按其位置的顺序关系是它们之间的逻辑表中元素按其位置的顺序关系是它们之间的逻辑关系关系。线性表的基本操作:(1)初始化(置空表)可由构造函数实现(2)求表长(Length)(3)查找或定位(Find)(4)插入(Insert)(5)删除(Remove
7、)(6)排序(Sort)(7)判空(IsEmpty)线性表的抽象数据类型4/27/2023 92.1 ADT2.1 ADT表(表(ListList)2.1.4 ADT表上定义的常用的基本运算表上定义的常用的基本运算(1)Empty():(2)Size():(3)Locate(x):(4)Retrieve(k,x):获取表中位置获取表中位置k处的元素,存入处的元素,存入x中中(5)Insert(k,x):在表的在表的位置位置k之后之后插入元素插入元素x(6)Erase(k,x):从表中删除位置从表中删除位置k处的元素,存入处的元素,存入x中中(7)PrintList():注意:运算名称的取法、需
8、要的形式参数的个数、各注意:运算名称的取法、需要的形式参数的个数、各参数的取名和含义、具体运算的约定、各参数取值参数的取名和含义、具体运算的约定、各参数取值(特别是边界值)和返回值的约定、各参数取值和(特别是边界值)和返回值的约定、各参数取值和返回值的类型的确定。返回值的类型的确定。进一步说明进一步说明:(1)线性表的基本操作根据实际应用是而定;)线性表的基本操作根据实际应用是而定;(2)复杂的操作可以通过基本操作的组合来)复杂的操作可以通过基本操作的组合来实现;实现;(3)对不同的应用,操作的接口可能不同。对不同的应用,操作的接口可能不同。线性表的抽象数据类型应用 扩大线性表 LA,将存在于
9、线性表 LB 中而不存在于 线性表 LA 中的数据元素插入到线性表 LA 中去。1从 LB 中一个数据元素;2依值在 LA 中进行;3若不存在,则之。重复上述三步直至 LB 中的数据元素取完为止。其中的每一步能否利用抽象数据类型线性表中定义 的基本操作来完成呢?在实际的程序设计中线性表的基本操作,必须线性表类型。确 定 存 储 结 构 实 现 基 本 操 作 在计算机中用一组的存储单 元线性表的各个数据元素,称作 线性表的顺序存储结构或顺序映象。用这 种方法存储的线性表称作顺序表。例:线性表 (1,2,3,4,5,6)的存储结构:1 2 3 4 5 6 一个典型的。一个。1 2 3 4 5 6
10、 依次存储,地址连续 中间没有空出存储单元。存储结构:地址不连续 中间存在空的存储单元。如何实现顺序表的内存分配?如何实现顺序表的内存分配?顺序表顺序表一维数组一维数组用一维数组 表示顺序表 类型相同 用一变量表示顺序表的长度属性 线性表长可变(删除)顺序表(元素)地址连续 随机存取 依次存放 数组(元素)数组长度不可动态定义 4/27/2023 172.2 2.2 用数组用数组(data)(data)实现实现ADTADT表(表(ListList)2.2.1 用数组实现用数组实现的的ADT表的特征数据及其类型表的特征数据及其类型表的元素的类型:表的元素的类型:为了适应表元素类型(为了适应表元素
11、类型(datatype)的变化,应将表类的变化,应将表类List定义为一个模板类。在该模板类定义为一个模板类。在该模板类中,用中,用T来表示用户指定的元素类型(来表示用户指定的元素类型(datatype)。表的长度表的长度:n(约定约定n=0为空表为空表)数组能容纳的表的最大长度数组能容纳的表的最大长度:MaxSize约定数组下标为约定数组下标为k-1的分量存放表的第的分量存放表的第k个元素,个元素,k=1,2,3,n。其结构如下图。其结构如下图用什么属性来描述顺序表?用什么属性来描述顺序表?存储空间的起始位置存储空间的起始位置顺序表的容量(最大长度)顺序表的容量(最大长度)顺序表的当前长度顺
12、序表的当前长度4/27/2023 19a1a2an01n-112n内存内存data数组下标数组下标元素位置元素位置MaxSize-1备用空间备用空间4/27/2023 202.2.2用数组实现用数组实现的的ADTADT表(表(ListList)的定义)的定义templateclass List private:int n;int MaxSize;T *data;/表元素数组表元素数组 public:List(int Max=10);/构造函数构造函数 List()delete data;/析构函数析构函数,复杂性,复杂性O(1)bool Empty()const return n=0;/复杂性
13、复杂性O(1)int Size()const return n;/复杂性复杂性O(1)int Locate(const T&x)const;/返回表中元素返回表中元素x位置位置 bool Retrieve(int k,T&x)const;/返回表中第返回表中第k个元素,存于个元素,存于x中中 List&Insert(int k,const T&x);/在表的位置在表的位置k处之后插入元素处之后插入元素x List&Erase(int k,T&x);/从表中删除位置从表中删除位置k处的元素,存入处的元素,存入x中中 void PrintList(ostream&out)const;;4/27/2
14、023 212.2.3 ADTADT表(表(ListList)的定义中未实现的函数的实现)的定义中未实现的函数的实现 与分析与分析(1)构造函数构造函数:List(int Max)templateList:List(int Max)/构造函数构造函数 MaxSize=Max;data=new TMaxSize;n=0;内存分配 MaxSizedatan4/27/2023 232.2.3 ADTADT表(表(ListList)的定义中未实现的函数的)的定义中未实现的函数的实现与分析(续)实现与分析(续)(2)为)为元素元素x定位定位:int Locate(const T&x)consttempl
15、ateint List:Locate(const T&x)constfor(int i=0;i n;i+)if(datai=x)return+i;return 0;4/27/2023 242.2.3 ADTADT表(表(ListList)的定义中未实现的函数的)的定义中未实现的函数的实现与分析(续)实现与分析(续)(3 3)检索)检索第第k个元素个元素给给x:bool Retrieve(int k,T&x)const;templatebool List:Retrieve(int k,T&x)const if(k n)return false;x=datak-1;return true;4/27
16、/2023 25插入定义:线性表的插入是指在插入定义:线性表的插入是指在第第k k(0 0 k k n n)个元素个元素之之后后插入一个新的数据元素插入一个新的数据元素x x,使使长度为长度为n n的线性表的线性表nkkaaaaa,1,21 变成变成长度为长度为n+1n+1的线性表的线性表nkkaaxaaa,1,21 需将第需将第k+1k+1至第至第n n共(共(n-kn-k)个个元素后移元素后移图示图示算法:算法:复杂性分析复杂性分析ai-1和和ai之间的逻辑关系发生了变化之间的逻辑关系发生了变化顺序存储要求存储位置反映逻辑关系顺序存储要求存储位置反映逻辑关系存储位置要反映这个变化存储位置要
17、反映这个变化33例:例:(35,12,24,42),),在在i=2的位置上插入的位置上插入33。435122442a1a2a3a40 1 2 3 4422412335什么时候不能插入什么时候不能插入?注意边界条件注意边界条件4/27/2023 28内存内存data数组下标数组下标元素位置元素位置a1a2akak+1an01k-1n-1kn12kk+1nn+1内存内存data数组下标数组下标元素位置元素位置a1a2akak+1an01k-1n-1kn12kk+1nn+1an-1xtemplateList&List:Insert(int k,const T&x)if(kn)cout out_bou
18、nds;else if(n=MaxSize)cout=k;i-)datai+1=datai;datak=x;n+;return*this;4/27/2023 30算法时间复杂度算法时间复杂度T(n)最坏情况时间复杂性:最坏情况时间复杂性:O(n)平均情况时间复杂性:平均情况时间复杂性:设设Pk是在第是在第k个元素之后插入个元素之后插入一个元素的概率,则在长度为一个元素的概率,则在长度为n的线性表中插入一个的线性表中插入一个元素时,所需移动的元素次数的平均次数为:元素时,所需移动的元素次数的平均次数为:nkkINknPE0)(nOnTnknPnEnPnkkINk 02)(1111则若认为4/27
19、/2023 31删除定义:线性表的删除是指将删除定义:线性表的删除是指将第第k k(1 1 k k n n)个个元素元素删除,使删除,使长度为长度为n n的线性表的线性表nkkkaaaaaa,11,21 变成变成长度为长度为n-1n-1的线性表的线性表nkkaaaaa,11,21 需将第需将第k+1k+1至第至第n n共(共(n-kn-k)个个元素前移元素前移图示图示算法:算法:复杂性分析复杂性分析ai-1和和ai之间的逻辑关系发生了变化之间的逻辑关系发生了变化顺序存储要求存储位置反映逻辑关系顺序存储要求存储位置反映逻辑关系存储位置要反映这个变化存储位置要反映这个变化例:(例:(35,33,1
20、2,24,42),),删除删除i=2的数据元素。的数据元素。535a1a2a3a40 1 2 3 4422412334a51224424/27/2023 34内存内存a1a2akak+1an01k-1data数组下标数组下标n-1kn12k元素序号元素序号k+1nn+1内存内存a1a2ak+1data数组下数组下标标01k-1n-1kn12k元素序号元素序号k+1nn+1anak+2n-2n-1templateList&List:Erase(int k,T&x)if(Retrieve(k,x)for(int i=k;in;i+)datai-1=datai;n-;return*this;else
21、coutout bounds;return*this;4/27/2023 36nkkDEknQE1)(nOnTnknnEnQnkDEk121)(11则若认为故在顺序表中插入或删除一个元素时,平均移动表中约一半的元素,当n很大时,效率很低算法时间复杂度算法时间复杂度T(n)最坏情况时间复杂性:最坏情况时间复杂性:O(n)平均情况时间复杂性:平均情况时间复杂性:设设Qk是删除第是删除第k个元素的概率,则在长个元素的概率,则在长度为度为n的线性表中删除一个元素时,所需移动的元素次数的平均的线性表中删除一个元素时,所需移动的元素次数的平均次数为:次数为:4/27/2023 372.2 2.2 用数组用
22、数组(data)(data)实现实现ADTADT表(表(ListList)2.2.3 ADTADT表(表(ListList)的定义中未实现的函数的实现与分析)的定义中未实现的函数的实现与分析(续)续)(6 6)输出所有元素)输出所有元素:void PrintList(ostream&out)const;templatevoid List:PrintList(ostream&out)const for(int i=0;i n;i+)out datai=无须为表示表中元素之间的 逻辑关系而增加额外的存储空间可随机存取任一元素缺点插入、删除操作需要移动大量的元素预先分配空间需按最大空间分配,利用不充
23、分表容量难以扩充2.2 用数组用数组(data)实现实现ADT表(表(List)4/27/2023 392.3 用指针实现用指针实现ADTADT表(表(ListList)2.3.0 2.3.0 用指针实现用指针实现ADTADT表动因和构想表动因和构想动因:动因:用用数组数组实现表实现表存在存在两个两个缺点缺点。构想:构想:表的每一个表的每一个元素元素(data)存放在随时向操作系存放在随时向操作系统申请到的单元(统申请到的单元(结点结点)内,前后结点靠)内,前后结点靠一个指一个指针来链接(单链)针来链接(单链)。结构如下图:。结构如下图:4/27/2023 402.3.1 用指针实现用指针实现
24、ADT表的特征数据及其表的特征数据及其类型类型表的元素的类型:表的元素的类型:为了适应表元素类型(为了适应表元素类型(datatype)的变的变化,应将表类化,应将表类List定义为一个模板类。在该模板类中,用定义为一个模板类。在该模板类中,用T来表示用户指定的元素类型(来表示用户指定的元素类型(datatype)。表的结点类型:表的结点类型:一个结点存放一个元素和一个指针一个结点存放一个元素和一个指针,用类,用类Node表示。表示。指针指向指针指向类类Node的结点。的结点。单链表单链表的结构如下图:的结构如下图:只需指向表的第一个结点的指针(只需指向表的第一个结点的指针(first)便可)
25、便可表示单链表表示单链表。数据域数据域 指针域指针域结点结点4/27/2023 41例例 线性表线性表 (ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG)4313103771925数据域数据域指针域指针域LIQIANSUNWANGWUZHAOZHENGZHOU存储地址存储地址1713192531374331first第一个元第一个元素指针素指针ZHAOQIANSUNLIZHOUWUZHENGWANG0first有几个节点?第一个节点的地址存储在哪个指针里?除了首元结点外,任一结点的存储位置由除了首元结点外,任一结点的存储位置由_指示指示每个节点包括哪两部分?4344cu
展开阅读全文