版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社第第 2 章章 线性表线性表 线性表的逻辑结构线性表的逻辑结构 线性表的顺序存储及实现线性表的顺序存储及实现 线性表的链接存储及实现线性表的链接存储及实现 顺序表和链表的比较顺序表和链表的比较 线性表的其他存储方法线性表的其他存储方法本章的基本内容是:本章的基本内容是:数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.1 线性表的逻辑结构线性表的逻辑结构数据元素之间的关系是什么?数据元素之间的关系是什么?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.1 线性表的逻辑结构线性
2、表的逻辑结构数据元素之间的关系是什么?数据元素之间的关系是什么?现实生活中,许多问题抽象出的数据模型是线性表,如何存储现实生活中,许多问题抽象出的数据模型是线性表,如何存储这种线性结构并实现插入、删除、查找等基本操作呢?这种线性结构并实现插入、删除、查找等基本操作呢? 数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社p 线性表:线性表:简称表,是简称表,是n(n0)个具有)个具有相同类型相同类型的的数据元素的数据元素的有限序有限序列列。p 线性表的长度:线性表的长度:线性表中数据元素的个数。线性表中数据元素的个数。p 空表:空表:长度等于零的线性表,长度等于零的线性表,记
3、为:记为:L=( )。p 非空表非空表记为:记为:L(a1, a2 , , ai-1, ai , , an)2.1 线性表的逻辑结构线性表的逻辑结构线性表的定义线性表的定义其中,其中,ai(1in)称为数据元素;)称为数据元素;下角标下角标 i 表示该元素在线性表中的位置或序号表示该元素在线性表中的位置或序号 。数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社a1a3a4ana22.1 线性表的逻辑结构线性表的逻辑结构线性表的特性线性表的特性1. 有限性有限性:线性表中数据元素的个数是有穷的。:线性表中数据元素的个数是有穷的。2. 相同性相同性:线性表中数据元素的类型是同
4、一的。:线性表中数据元素的类型是同一的。3. 顺序性顺序性:线性表中相邻的数据元素:线性表中相邻的数据元素ai-1和和ai之间存在之间存在序偶关系序偶关系(ai-1, ai),即,即ai-1是是ai的前驱,的前驱, ai是是ai-1的后继;的后继;a1无前驱,无前驱,an无后继,其它每个元素有且仅有一个前无后继,其它每个元素有且仅有一个前驱和一个后继。驱和一个后继。 数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社线性表的抽象数据类型定义线性表的抽象数据类型定义ADT ListData 线性表中的数据元素具有相同类型,线性表中的数据元素具有相同类型, 相邻元素具有前驱和后
5、继关系相邻元素具有前驱和后继关系OperationInitList 前置条件前置条件:表不存在:表不存在 输入输入:无:无 功能功能:表的初始化:表的初始化 输出输出: 无无 后置条件后置条件:建一个空表:建一个空表2.1 线性表的逻辑结构线性表的逻辑结构数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社DestroyList 前置条件前置条件:表已存在:表已存在 输入输入:无:无 功能功能:销毁表:销毁表 输出输出:无:无 后置条件后置条件:释放表所占用的存储空间:释放表所占用的存储空间Length 前置条件前置条件:表已存在:表已存在 输入输入:无:无 功能功能:求表的
6、长度:求表的长度 输出输出:表中数据元素的个数:表中数据元素的个数 后置条件后置条件:表不变:表不变2.1 线性表的逻辑结构线性表的逻辑结构线性表的抽象数据类型定义线性表的抽象数据类型定义数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社Get 前置条件前置条件:表已存在:表已存在 输入输入:元素的序号:元素的序号i 功能功能:在表中取序号为:在表中取序号为i的数据元素的数据元素 输出输出:若:若i合法,返回序号为合法,返回序号为i的元素值,否则抛出异常的元素值,否则抛出异常 后置条件后置条件:表不变:表不变Locate 前置条件前置条件:表已存在:表已存在 输入输入:数据
7、元素:数据元素x 功能功能:在线性表中查找值等于:在线性表中查找值等于x的元素的元素 输出输出:若查找成功,返回:若查找成功,返回x在表中的序号,否则返回在表中的序号,否则返回0 后置条件后置条件:表不变:表不变2.1 线性表的逻辑结构线性表的逻辑结构线性表的抽象数据类型定义线性表的抽象数据类型定义数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社Insert前置条件前置条件:表已存在:表已存在输入输入:插入:插入i;待插待插x功能功能:在表的第:在表的第i个位置处插入一个新元素个位置处插入一个新元素x输出输出:若插入不成功,抛出异常:若插入不成功,抛出异常 后置条件后置条
8、件:若插入成功,表中增加一个新元素:若插入成功,表中增加一个新元素Delete前置条件前置条件:表已存在:表已存在输入输入:删除位置:删除位置i功能功能:删除表中的第:删除表中的第i个元素个元素 输出输出:若删除成功,返回被删元素,否则抛出异常:若删除成功,返回被删元素,否则抛出异常 后置条件后置条件:若删除成功,表中减少一个元素:若删除成功,表中减少一个元素2.1 线性表的逻辑结构线性表的逻辑结构线性表的抽象数据类型定义线性表的抽象数据类型定义数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社Empty 前置条件前置条件:表已存在:表已存在 输入输入:无:无 功能功能:判
9、断表是否为空:判断表是否为空 输出输出:若是空表,返回:若是空表,返回1,否则返回,否则返回0 后置条件后置条件:表不变:表不变ADT进一步说明进一步说明: :(1 1)线性表的基本操作根据实际应用是而定;)线性表的基本操作根据实际应用是而定;(2)复杂的操作可以通过基本操作的组合来实现;)复杂的操作可以通过基本操作的组合来实现;(3)对不同的应用,操作的接口可能不同。对不同的应用,操作的接口可能不同。2.1 线性表的逻辑结构线性表的逻辑结构线性表的抽象数据类型定义线性表的抽象数据类型定义数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.2 线性表的顺序存储结构及实现线
10、性表的顺序存储结构及实现顺序表顺序表线性表的顺序存储结构线性表的顺序存储结构例:例:(34, 23, 67, 43)34236743 4存储要点存储要点用一段地址用一段地址连续连续的存储单元的存储单元依次依次存储线性表中的数据元素存储线性表中的数据元素数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表顺序表线性表的顺序存储结构线性表的顺序存储结构例:例:(34, 23, 67, 43)34236743存储空间的起始位置存储空间的起始位置 4用什么属性来描述顺序表?用什么属性来描述顺序表?顺序表的容量(最大长度
11、)顺序表的容量(最大长度)顺序表的当前长度顺序表的当前长度数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表顺序表线性表的顺序存储结构线性表的顺序存储结构例:例:(34, 23, 67, 43)34236743 4如何实现顺序表的内存分配?如何实现顺序表的内存分配?顺序表顺序表一维数组一维数组数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社 0 i-2 i-1 n-1 Max-1 a1 ai-1 ai an 空闲空闲 长度长度2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺
12、序表顺序表一般情况下,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:的顺序存储:数组的长度数组的长度Max线性表的长度线性表的长度Length数组的长度大于等于当前线性表的长度数组的长度大于等于当前线性表的长度 数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社如何求得任意元素的存储地址?如何求得任意元素的存储地址? 0 i-2 i-1 n-1 Max-1 a1 ai-1 ai an 空闲空闲 长度长度2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表顺序表一般情况下,一般情况下,(a1,a2,, ai-1,ai , , an)的顺
13、序存储:的顺序存储:cLoc(ai)Loc(a1)数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社 0 i-2 i-1 n-1 Max-1 a1 ai-1 ai an 空闲空闲 长度长度Loc(ai)=Loc(a1) + (i - -1)c随机存取随机存取:在在O(1)时间内存取数据元素时间内存取数据元素2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表顺序表一般情况下,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:的顺序存储:cLoc(ai)Loc(a1)数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.
14、2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现存储结构是数据及其逻辑结构在计算机中的表示;存储结构是数据及其逻辑结构在计算机中的表示;存取结构是在一个数据结构上对查找操作的时间性存取结构是在一个数据结构上对查找操作的时间性能的一种描述。能的一种描述。存储结构和存取结构存储结构和存取结构 “顺序表是一种顺序表是一种随机存取随机存取的的存储存储结构结构”的含义为:的含义为:在顺序表这种存储结构上进行的查找操作,其时间在顺序表这种存储结构上进行的查找操作,其时间性能为性能为O(1)。数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社 顺序表类的声明顺序表类的声明cons
15、t int MaxSize=100; template /模板类模板类class SeqList public: SeqList( ) ; /构造函数构造函数 SeqList(DataType a , int n); SeqList( ) ; /析构函数析构函数 int Length( ); DataType Get(int i); int Locate(DataType x ); void Insert(int i, DataType x); DataType Delete(int i); private: DataType dataMaxSize; int length;2.2 线性表的顺
16、序存储结构及实现线性表的顺序存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社操作接口:操作接口:SeqList( )( ) 算法描述:算法描述:SeqList :SeqList( ) length = 0; 2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实现无参构造函数无参构造函数 datalength0数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社操作接口:操作接口:SeqList( (DataType a , int n) )顺序表的实现顺序表的实现有参构造函数有参构造函数2.2 线性表的顺序存储
17、结构及实现线性表的顺序存储结构及实现顺序表顺序表 数组数组a351224334253512243342数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template SeqList :SeqList( (DataType a , int n) ) if ( (n MaxSize) ) throw 参数非法参数非法; for ( (i = 0; i =MaxSize合理的插入位置:合理的插入位置:1ilength+1(i指的是元素的序号)指的是元素的序号)2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实现插入插入 435122442a1a
18、2a3a40 1 2 3 4422412335什么时候不能插入什么时候不能插入?注意边界条件注意边界条件数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社1. 如果表满了,则抛出如果表满了,则抛出上溢上溢异常异常;2. 如果元素的插入位置不合理,则抛出如果元素的插入位置不合理,则抛出位置位置异常异常;3. 将最后一个元素至第将最后一个元素至第i个元素分别向后移动一个位置;个元素分别向后移动一个位置;4. 将元素将元素x填入位置填入位置i处;处;5. 表长加表长加1;算法描述算法描述伪代码伪代码2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实
19、现插入插入数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template void SeqList:Insert( (int i, DataType x) ) if ( (length = MaxSize) ) throw 上溢上溢; if ( (i length + 1) ) throw 位置位置; for ( (j = length; j = i; j-)-) dataj = dataj- -1; datai- -1 = x; length+;算法描述算法描述C+描述描述2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实现插入插入基本
20、语句基本语句?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社最好最好情况(情况( i=n+1):): 基本语句执行基本语句执行0次,时间复杂度为次,时间复杂度为O(1)。最坏最坏情况(情况( i=1):): 基本语句执行基本语句执行n+1次,时间复杂度为次,时间复杂度为O(n)。平均平均情况(情况(1in+1):): 时间复杂度为时间复杂度为O(n)。时间性能分析时间性能分析2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实现插入插入 + +- -+ += =11)=1(niiinp + +- -+ + += =11)=1(11niinn
21、2n=O(n)数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社操作接口:操作接口: DataType Delete(int i)删除前:删除前:( (a1, , ai- -1, ,ai, ,ai+1,an) )删除后:删除后:( (a1,ai- -1, ,ai+1, ,an) ) 顺序表的实现顺序表的实现删删 除除2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现ai-1和和ai之间的逻辑关系发生了变化之间的逻辑关系发生了变化顺序存储要求存储位置反映逻辑关系顺序存储要求存储位置反映逻辑关系存储位置要反映这个变化存储位置要反映这个变化数据结构(数据结构(C+版)第
22、版)第2版版清华大学出版社清华大学出版社例:(例:(35, 33, 12, 24, 42),),删除删除i=2的数据元素。的数据元素。仿照顺序表的插入操作,完成:仿照顺序表的插入操作,完成:1. 分析边界条件;分析边界条件;2. 分别给出伪代码和分别给出伪代码和C+描述的算法;描述的算法;3. 分析时间复杂度。分析时间复杂度。2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实现删删 除除 535a1a2a3a40 1 2 3 4422412334a5122442数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社顺序表的实现顺序表的实现按位查找
23、按位查找操作接口:操作接口: DataType Get(int i) 2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现 0 i-2 i-1 n-1 Max-1 a1 ai-1 ai an 空闲空闲 n算法描述:算法描述:template DataType SeqList :Get( int i ) if (i = 1 & i = length) return i-1; 时间复杂度时间复杂度?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社顺序表的实现顺序表的实现按值查找按值查找操作接口:操作接口: int Locate(DataType x ) 2.2 线性表
24、的顺序存储结构及实现线性表的顺序存储结构及实现 535a1a2a3a40 1 2 3 442241233a5例:在(例:在(35, 33, 12, 24, 42) 中查找值为中查找值为12的元素,的元素,返回在表中的序号。返回在表中的序号。iii注意序号和下标之间的关系注意序号和下标之间的关系数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template int SeqList :Locate( (DataType x) ) for ( (i = 0; i length; i+) ) if ( (datai = x) ) return i + 1; return 0;
25、2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现顺序表的实现顺序表的实现按值查找按值查找算法描述:算法描述:时间复杂度时间复杂度?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社顺序表的优缺点顺序表的优缺点 顺序表的优点:顺序表的优点: 无需为表示表中元素之间的逻辑关系而增加额外的无需为表示表中元素之间的逻辑关系而增加额外的存储空间;存储空间; 随机存取:可以快速地存取表中任一位置的元素。随机存取:可以快速地存取表中任一位置的元素。 顺序表的缺点:顺序表的缺点: 插入和删除操作需要移动大量元素;插入和删除操作需要移动大量元素; 表的容量难以确定,表的容量难以扩
26、充;表的容量难以确定,表的容量难以扩充; 造成存储空间的造成存储空间的碎片碎片。 2.2 线性表的顺序存储结构及实现线性表的顺序存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表:单链表:线性表的链接存储结构。线性表的链接存储结构。存储思想:存储思想:用一组用一组任意任意的存储单元存放线性表的元素。的存储单元存放线性表的元素。2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表单链表静态存储分配静态存储分配 顺序表顺序表事先确定容量事先确定容量 链链 表表动态存储分配动态存储分配 运行时分配空间运行时分配空间 连续连续不连续不连续零散分布零
27、散分布数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社0200020803000325存储特点:存储特点: 逻辑次序和物理次序逻辑次序和物理次序 不一定相同。不一定相同。 2.元素之间的逻辑关系元素之间的逻辑关系 用指针表示。用指针表示。2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现例:例:(a1, a2 ,a3, a4)的存储示意图的存储示意图单链表单链表 a10200 a20325 a30300 a4 数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表单链表020002
28、0803000325 a10200 a20325 a30300 a4 结点结点数据域数据域指针域指针域单链表是由若干结点构成的;单链表是由若干结点构成的;单链表的结点只有一个指针域。单链表的结点只有一个指针域。data:存储数据元素存储数据元素next:存储指向后继结点的地址存储指向后继结点的地址 data next单链表的结点结构:单链表的结点结构:数据域数据域指针域指针域数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template struct Node DataType data; Node *next; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及
29、实现单链表单链表 data next单链表的结点结构:单链表的结点结构:如何申请一个结点如何申请一个结点?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社s=new Node ;template struct Node DataType data; Node *next; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表单链表 data next单链表的结点结构:单链表的结点结构: sNode数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社s=new Node ;2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表单链
30、表 data next sNode如何引用数据元素如何引用数据元素?s-data ;*s.data ;data如何引用指针域如何引用指针域?nexts-next;数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现0200020803000325 a10200 a20325 a30300 a4 firsta1a2an非空表非空表first=NULL空表空表使用单链表时,由于我们重点关注的使用单链表时,由于我们重点关注的是它所表示的线性性表中的数据元素是它所表示的线性性表中的数据元素之间的逻辑关系,所以,我们可以将之间
31、的逻辑关系,所以,我们可以将实际存储示意图抽象地表示为:实际存储示意图抽象地表示为:什么是单链表的存储结构什么是单链表的存储结构?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表单链表0200020803000325 a10200 a20325 a30300 a4 firsta1a2an非空表非空表first=NULL空表空表头指针:头指针:指向第一个结点的地址。指向第一个结点的地址。尾标志:尾标志:终端结点的指针域为空。终端结点的指针域为空。数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学
32、出版社2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表单链表0200020803000325 a10200 a20325 a30300 a4 firsta1a2an非空表非空表first=NULL空表空表空表和非空表不统一,缺点?空表和非空表不统一,缺点?如何将空表与非空表统一如何将空表与非空表统一?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社头结点:头结点:在在单链表的第一个元素结点之前附设一个类单链表的第一个元素结点之前附设一个类型相同的结点,以便空表和非空表处理统一。型相同的结点,以便空表和非空表处理统一。 2.3 线性表的链接存储结构及实现线
33、性表的链接存储结构及实现单链表单链表非空表非空表firsta1a2an空表空表first数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template class LinkList public: LinkList( )( ); LinkList( (DataType a , int n) ); LinkList( )( ); int Length( )( ); DataType Get( (int i) ); int Locate( (DataType x) ); void Insert( (int i, DataType x) ); DataType Delete(
34、 (int i) ); void PrintList( )( ); private: Node *first; ;单链表类的声明单链表类的声明2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现遍历操作遍历操作操作接口:操作接口: void PrintList( ); v核心操作(关键操作):核心操作(关键操作):工作指针后移工作指针后移。从头结点。从头结点(或开始结点)出发,通过工作指针的反复后移而将(或开始结点)出发,通过工作指针的反复后移而将整个单链表整个单链表“审视审视”一遍的方法称为
35、一遍的方法称为扫描扫描(或遍历)(或遍历)。2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现firsta1pa2panaippp数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现遍历操作遍历操作操作接口:操作接口: void PrintList( ); 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现template void LinkList : PrintList( ) p = first-next; while (p != NULL) cout data; p = p-next; p+能否完成指针后移?能否完成指针后移?
36、a1a2pp+p-next数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现按位查找按位查找操作接口:操作接口: DataType Get(int i);2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现firsta1a2anaipp查找失败查找失败1. 工作指针工作指针p初始化初始化; 累加器累加器count初始化初始化;2. 重复执行下述操作,直到重复执行下述操作,直到p为空或为空或p指向第指向第i个结点:个结点: 2.1 工作指针工作指针p后移后移; 2.2 count+;3. 返回累加器返回累加器count的值;的值;pcount
37、=1pcount =2p查找成功查找成功count =i数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template int LinkList : Get(int i) p = first-next; count = 1; while (p != NULL & count next; count+; if(!p) throw “位置异常位置异常” /退出循环表明查找失败退出循环表明查找失败 else return count; /查找成功,返回序号查找成功,返回序号 或者返回或者返回p-data2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单
38、链表的实现按位查找按位查找算法描述算法描述C+描述描述数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template int LinkList : Locate(DataType x) p = first-next; count = 1; while (p != NULL) if (p-data = x) return count; /查找成功,返回序号查找成功,返回序号 p = p-next; count+; return 0; /退出循环表明查找失败退出循环表明查找失败2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现按值查找按值查
39、找算法描述算法描述C+描述描述数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现插入插入操作接口:操作接口: void Insert(int i, DataType x); 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现如何实现结点如何实现结点ai-1、x和和ai之间逻辑关系的变化?之间逻辑关系的变化?pxsfirsta1ai-1anai算法描述:算法描述:s=new Node; s-data=x;s-next=p-next; p-next=s;数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社注意分析注意分析边界边
40、界情况情况表头、表尾。表头、表尾。 单链表的实现单链表的实现插入插入2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现firsta1anaipxs算法描述:算法描述:s=new Node; s-data=x;s-next=p-next; p-next=s;pxs由于单链表带头结点,由于单链表带头结点,表头、表中、表尾三种表头、表中、表尾三种情况的操作语句一致。情况的操作语句一致。 数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社算法描述算法描述伪代码伪代码 1. 工作指针工作指针p初始化;初始化; 2. 查找第查找第i-1个结点并使工作指针个结点并使工作指针p指
41、向该结点;指向该结点; 3. 若查找不成功,则插入位置不合理,抛出插入位置异常;若查找不成功,则插入位置不合理,抛出插入位置异常; 否则,否则, 3.1 生成一个元素值为生成一个元素值为x的新结点的新结点s; 3.2 将新结点将新结点s插入到结点插入到结点p之后;之后;2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现插入插入数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社 template void LinkList : Insert(int i, DataType x) p = first ; count = 0; /工作指针工作指针
42、p应指向头结点应指向头结点 while (p != NULL & count next; count+; if (p = NULL) throw 位置位置; /没有找到第没有找到第i 1个结点个结点 else s = new Node; s-data = x; /申请一个结点申请一个结点s s-next = p-next; p-next = s; /结点结点s插入结点插入结点p之后之后 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现插入插入基本语句?时间复杂度?基本语句?时间复杂度?数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链
43、表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)头插法:头插法:将待插入结点插在头结点的后面将待插入结点插在头结点的后面 。算法描述:算法描述:first=new Node; first-next=NULL; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数组数组a3512243342初始化初始化first数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)头插法:头插法:将待插入结点
44、插在头结点的后面将待插入结点插在头结点的后面 。2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数组数组a3512243342算法描述:算法描述:s=new Node; s-data=a0;s-next=first-next;first-next=s; 插入第一个元素结点插入第一个元素结点first35s数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)头插法:头插法:将待插入结点插在头结点的后面将待插入结点插在头结点的后面 。2.3 线性表的链接
45、存储结构及实现线性表的链接存储结构及实现数组数组a3512243342算法描述:算法描述:s=new Node; s-data=a1;s-next=first-next;first-next=s; 依次插入每一个结点依次插入每一个结点12sfirst35数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template LinkList : LinkList(DataType a , int n) first = new Node; first-next = NULL; for (i = 0; i data = ai; s-next = first-next; first-
46、next = s; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现构造函数构造函数数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社尾插法:尾插法:将待插入结点插在终端结点的后面。将待插入结点插在终端结点的后面。 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)算法描述:算法描述:first=new Node; rear=first;数组数组a3512243342初始化初始化firstrear数据结构(数据结构
47、(C+版)第版)第2版版清华大学出版社清华大学出版社尾插法:尾插法:将待插入结点插在终端结点的后面。将待插入结点插在终端结点的后面。 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)算法描述:算法描述:s=new Node; s-data=a0;rear-next=s;rear=s;数组数组a3512243342插入第一个元素结点插入第一个元素结点firstrear35srear数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社尾插法:尾插法:将待
48、插入结点插在终端结点的后面。将待插入结点插在终端结点的后面。 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)算法描述:算法描述:s=new Node; s-data=a1;rear-next=s;rear=s;数组数组a3512243342依次插入每一个结点依次插入每一个结点first35rear12srear数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社尾插法:尾插法:将待插入结点插在终端结点的后面。将待插入结点插在终端结点的后面。 2.3
49、 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现构造函数构造函数操作接口:操作接口:LinkList(DataType a , int n)算法描述:算法描述:rear-next=NULL;数组数组a3512243342最后一个结点插入后最后一个结点插入后first3542srear数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template LinkList : LinkList(DataType a , int n) first = new Node; /生成头结点生成头结点 r = first; /尾指针初始化尾指针初始化 for
50、(i = 0; i data = ai; r-next = s; r = s; r-next = NULL; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实现单链表的实现构造函数构造函数算法描述:算法描述:数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现删除删除操作接口:操作接口: DataType Delete(int i); 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现p如何实现结点如何实现结点ai-1和和ai之间逻辑关系的变化?之间逻辑关系的变化?firsta1ai-1ai+1ai算法描述:算法描述:q
51、=p-next; x=q-data;p-next=q-next; delete q;q数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现删除删除2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现算法描述:算法描述:q=p-next; x=q-data;p-next=q-next; delete q;注意分析注意分析边界边界情况情况表头、表尾。表头、表尾。 pqpq表尾的特殊情况:表尾的特殊情况:虽然被删结点不存在,虽然被删结点不存在,但其前驱结点却存在。但其前驱结点却存在。 p-next=NULLfirsta1ana2数据结构(数据结构(C
52、+版)第版)第2版版清华大学出版社清华大学出版社算法描述算法描述伪代码伪代码 1.工作指针工作指针p初始化;初始化; 2. 查找第查找第i-1个结点并使工作指针个结点并使工作指针p指向该结点;指向该结点; 3. 若若p不存在或不存在或p不存在后继结点,则抛出位置异常;不存在后继结点,则抛出位置异常; 否则,否则, 3.1 暂存被删结点和被删元素值;暂存被删结点和被删元素值; 3.2 摘链,将结点摘链,将结点p的后继结点从链表上摘下;的后继结点从链表上摘下; 3.3 释放被删结点;释放被删结点; 3.4 返回被删元素值;返回被删元素值; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实
53、现单链表的实现单链表的实现删除删除数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社template DataType LinkList : Delete(int i) p = first ; count = 0; while (p != NULL & count next; count+; if (p = NULL | p-next = NULL) throw 位置位置; else q = p-next; x = q-data; p-next = q-next; delete q; return x; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现单链表的实
54、现单链表的实现删除删除数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表的实现单链表的实现析构函数析构函数析构函数将单链表中所有结点的存储空间释放。析构函数将单链表中所有结点的存储空间释放。 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现操作接口:操作接口:LinkList( );firsta1a2anaiq算法描述:算法描述:q = first; first = first-next;delete q;first注意:保证链表未处理的部分不断开注意:保证链表未处理的部分不断开 数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社单链表
55、的实现单链表的实现析构函数析构函数template LinkList : LinkList( ) while (first != NULL) q = first; first = first-next; delete q; 2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现算法描述:算法描述:数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社启示:算法设计的一般过程启示:算法设计的一般过程算法设计的一般步骤:算法设计的一般步骤:第一步:确定第一步:确定入口入口(已知条件)、(已知条件)、出口出口(结果);(结果);第二步:根据一个小实例画出第二步:根据一个小实例画
56、出示意图示意图;第三步:第三步: 正向思维正向思维:选定一个思考问题的起点,逐:选定一个思考问题的起点,逐步提出问题、解决问题;步提出问题、解决问题; 逆向思维逆向思维:从结论出发分:从结论出发分析为达到这个结论应该先有什么;析为达到这个结论应该先有什么; 正逆结合正逆结合;第四步:写出第四步:写出顶层顶层较抽象算法,分析较抽象算法,分析边界边界情况;情况;第五步:第五步:验证验证第四步的算法;第四步的算法;第六步:写出第六步:写出具体具体算法;算法;第七步:第七步:进一步进一步验证,手工运行。验证,手工运行。数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社循环链表循环链
57、表firsta1ai-1anaip从单链表中某结点从单链表中某结点p出发如何找到其前驱?出发如何找到其前驱?将单链表的首尾相接,将终端结点的指针域由空指针将单链表的首尾相接,将终端结点的指针域由空指针改为指向头结点,构成改为指向头结点,构成单循环链表单循环链表,简称,简称循环链表循环链表。2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社循环链表循环链表空表和非空表的处理一致空表和非空表的处理一致附设头结点附设头结点first空循环链表空循环链表firsta1ai-1anai非空循环链表非空循环链表2.3 线性表的
58、链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社firsta1ai-1anai循环链表循环链表插入插入xspxspxsp算法描述:算法描述:s=new Node; s-data=x; s-next=p-next; p-next=s;2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社 template void LinkList :Insert(int i, DataType x) p = first ; count = 0; while (p !=
59、first & count next; count+; if (p = NULL) throw 位置位置; else s = new Node; s-data = x; s-next = p-next; p-next = s; 循环链表循环链表插入插入与单链表的插入操作相比,差别是什么?与单链表的插入操作相比,差别是什么?2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社循环条件:循环条件:p != NULLp != firstp-next != NULLp-next != first循环链表循环链表循环链表中没有
60、明显的尾端循环链表中没有明显的尾端 如何避免死循环如何避免死循环2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社如何查找开始结点和终端结点?如何查找开始结点和终端结点?循环链表循环链表firsta1ai-1anai开始结点:开始结点:first-next 终端结点:将单链表扫描一遍,时间为终端结点:将单链表扫描一遍,时间为O(n)2.3 线性表的链接存储结构及实现线性表的链接存储结构及实现数据结构(数据结构(C+版)第版)第2版版清华大学出版社清华大学出版社reara1ai-1anai开始结点:开始结点:rear
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 染色体非整倍体筛查的孕妇满意度调查与分析
- 极端气候事件与腹泻病暴发的流行病学特征
- 糖尿病患者用药安全及药物注射管理与实践
- 小学生科学探究高阶主题班会说课稿
- 初中青春期心理健康说课稿2025年37
- 甘肃省庆阳市2025-2026年八年级下二模地理试卷(含答案)
- 美发护理产品使用方法
- 肺癌术后康复期的社交与心理支持
- 医学26年老年肌钙蛋白解读查房课件
- 2026年集体教学活动设计原则
- 城市管理辅助性服务投标方案技术标
- 2024年网上大学智能云服务交付工程师认证考试题库800题(含答案)
- 船舶自动化机舱实习报告
- FZT 61001-2019 纯毛、毛混纺毛毯
- 《如何上好自习》课件
- 阿含经白话文
- 《供应链管理》期末考试复习题库(含答案)
- 4-肠结核及结核性腹膜炎
- GB/T 38362-2019进境百合种球疫情监测规程
- GB/T 22095-2008铸铁平板
- FZ/T 73023-2006抗菌针织品
评论
0/150
提交评论