收藏 分享(赏)

数据结构c++版第2章线性表-1.ppt

上传人:11xg27ws 文档编号:9860989 上传时间:2019-09-11 格式:PPT 页数:43 大小:352KB
下载 相关 举报
数据结构c++版第2章线性表-1.ppt_第1页
第1页 / 共43页
数据结构c++版第2章线性表-1.ppt_第2页
第2页 / 共43页
数据结构c++版第2章线性表-1.ppt_第3页
第3页 / 共43页
数据结构c++版第2章线性表-1.ppt_第4页
第4页 / 共43页
数据结构c++版第2章线性表-1.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、第2章 线性表,线性表的逻辑结构线性表的顺序存储及实现线性表的链接存储及实现顺序表和单链表的比较线性表的其他存储及实现,本章的基本内容是:,2.1 线性表的逻辑结构,学生成绩登记表,姓 名,英语,数据结构,高数,学号,丁一,96,78,87,0101,李二,87,90,78,0102,张三,67,86,86,0103,孙红,69,81,96,0104,王冬,87,74,66,0105,数据元素之间的关系是什么?,线性表:简称表,是n(n0)个具有相同类型的数据元素的有限序列。 线性表的长度:线性表中数据元素的个数。 空表:长度等于零的线性表,记为:L=( )。 非空表记为:L(a1, a2 ,

2、 , ai-1, ai , , an),线性表的定义,其中,ai(1in)称为数据元素; 下角标 i 表示该元素在线性表中的位置或序号,称元素 ai位于表的第 i 个位置,或称 ai是表中的第 i 个元素。,线性表的图形表示,线性表(a1, a2 , , ai-1, ai , , an)的图形表示如下:,线性表的特性,1.有限性:线性表中数据元素的个数是有穷的。,2.相同性:线性表中数据元素的类型是同一的。,3.顺序性:线性表中相邻的数据元素ai-1和ai之间存在序偶关系(ai-1, ai),即ai-1是ai的前驱, ai是ai-1的后继;a1 无前驱,an无后继,其它每个元素有且仅有一个前驱

3、和一个后继。,线性表的抽象数据类型定义,见教材P50,线性表ADT的几点说明,(1)对于不同的应用,线性表的基本操作是不同的; (2)复杂的操作可以通过基本操作的组合来实现; (3)对不同的应用,操作的接口可能不同。,顺序表线性表的顺序存储结构,例:(34, 23, 67, 43),34,23,67,43,4,2.2 线性表的顺序存储结构及实现,例:(34, 23, 67, 43),34,23,67,43,4,如何实现顺序表的内存分配?,顺序表线性表的顺序存储结构,例:(34, 23, 67, 43),34,23,67,43,4,用什么属性来描述顺序表?,如何描述顺序存储结构需要的三个属性?,

4、0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,表的长度,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:,(1)存储空间的起始位置:数组名 data (2)顺序表的存储容量:数组长度MaxSize (3)顺序表的当前长度:length,length,区分:“数组的长度”和“线性表的长度”,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,表的长度,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:,(1)前者确定不变 后者变化 (2)线性表的长度=数组的长度,线性表的长度length,数组的长度M

5、axSize,如何求得任意元素的存储地址?从而读取任意数据元素?,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,表的长度,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:,复习存储地址有关的内容,地址:存储器中每个存储单元都有自己的编号,这个编号称为地址。 相对地址(偏移地址):选定一个参考单元作为基准单元(称为基地址,一般将基地址视为0),任一存储单元到基地址之间的单元数,称为该存储单元相对于基地址的相对地址。 绝对地址:任一存储单元的偏移地址,加上它的基准单元的绝对地址,即为该单元的绝对地址。,复习存储地址有关的内容,在顺序表中,任意元素

6、的相对地址就是该元素在数组中的下标,任意元素的绝对地址一般用loc(ai)表示。,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,表的长度,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:,Loc(ai)=Loc(a1) + (i -1)c,计算任意元素的存储地址的时间是相等的,具有这一特点的存储结构称为随机存取结构,区分:存储结构和存取结构,存储结构是数据及其逻辑结构在计算机中的表示 存取结构是在某种逻辑结构上对查找操作时间性能的描述 “顺序表是一种随机存取的存储结构”的含义为:在顺序表这种存储结构上进行查找操作,其时间性能为O(1)。,顺序

7、表类的声明,const int MaxSize=100; template /模板类 class SeqList public:SeqList( ) ; /构造函数SeqList(T a , int n); SeqList( ) ; /析构函数int Length( );T Get(int i); int Locate(T x ); void Insert(int i, T x); T Delete(int i);,顺序表类的声明,private:T dataMaxSize; int length; ;,template /模板的标志 T Max(T x, T y) return x=y? x

8、: y;int i=Max(1, 2);double x=Max(1.2, 2.5);,函数Max 要返回两个参数中的最大者,如何定义一个具有通用功能的函数Max,支持不同类型的参数和返回值?,构造函数的作用是初始化一个对象的成员变量。 构造函数的特点: 1. 构造函数必须与类名相同; 2. 必须声明为类的公有成员函数; 3. 不可以有返回值也不得指明返回类型; 4. 构造函数可以重载。,构造函数的作用是什么(What)? 什么时候(When)调用? 由谁(Who)来调用?,What:构造函数为成员变量分配存储空间并初始化 When:在声明一个对象变量是该类的一个实例时调用 Who:由系统根据

9、实参自动调用相应的构造函数,操作接口SeqList( ):创建一个空的顺序表,算法描述: SeqList:SeqList( ) length=0; ,顺序表的实现无参构造函数,0,操作接口SeqList(T a , int n):创建一个长度为n的顺序表,顺序表的实现有参构造函数,5,35,12,24,33,42,template SeqList:SeqList(T a , int n) if (nMaxSize) throw “参数非法“;for (i=0; in; i+ +) datai=ai;length=n; ,顺序表的实现有参构造函数,算法描述:,C+通过下列语句实现异常处理机制:t

10、hrow抛出一个异常,供try捕获;try检测/捕获异常;catch处理try所捕获的异常。,析构函数用于在一个对象被撤消时删除其成员变量,其标志是在类的名字前面加上“”。 析构函数特点: 1.析构函数没有参数和返回值; 2.一个类只能有一个析构函数; 3. 析构函数不允许重载。,析构函数的作用是什么(What)? 什么时候(When)调用? 由谁(Who)来调用?,What:在一个对象被撤销时释放其成员变量占用的存储单元 When:在类销毁(退出作用域)时调用 Who:由系统自动调用,操作接口void Insert(int i, T x):在线性表的第i(1i n+1)个位置上插入一个新元素

11、x 插入前:(a1, , ai-1, ai, , an) 插入后:(a1, , ai-1, x , ai, , an),顺序表的实现插入,ai-1和ai之间的逻辑关系发生了变化,顺序存储要求存储位置反映逻辑关系,存储位置要反映这个变化,例:(35,12,24,42),在i=2的位置上插入33。,表满:length=MaxSize 合理的插入位置:1ilength+1(i指的是元素的序号),顺序表的实现插入,4,35,12,24,42,a1,a2,a3,a4,0 1 2 3 4,42,24,12,33,什么时候不能插入?,1. 如果表满了,则抛出上溢异常; 2. 如果元素的插入位置不合理,则抛出

12、位置异常; 3. 将最后一个元素至第i个元素分别向后移动一个位置; 4. 将元素x填入位置i处; 5. 表长加1;,算法描述伪代码,顺序表的实现插入,顺序表的实现插入,1 如果顺序表已满,抛出上溢异常 2 如果元素插入位置不存在,抛出位置异常 3 将最后一个元素至第i个元素(i为插入位置)向后移动一个位置 4 将元素插入到i位置 5 将顺序表的长度增1,template void SeqList:Insert(int i, T x) int j;if (length=MaxSize) throw “上溢“;if (ilength+1) throw “位置“;for (j=length; j=i

13、; j-)dataj=dataj-1; datai-1=x;length+; ,基本语句?,顺序表的实现插入,最好情况(i=n+1):基本语句执行0次,时间复杂度为O(1)。 最坏情况(i=1):基本语句执行n次,时间复杂度为O(n)。 平均情况(1in+1):时间复杂度为O(n)。,时间性能分析,操作接口T Delete(int i):将线性表中的第i(1 i n)个元素删除,并返回被删除元素的值 删除前:(a1, , ai-1,ai,ai+1,an) 删除后:(a1,ai-1,ai+1, ,an),顺序表的实现删 除,ai-1和ai之间的逻辑关系发生了变化,顺序存储要求存储位置反映逻辑关系

14、,存储位置要反映这个变化,顺序表的实现删 除,例:(35, 33, 12, 24, 42),删除i=2的数据 元素。,仿照顺序表的插入操作,完成: 1. 分析边界条件; 2. 分别给出伪代码和C+描述的算法; 3. 分析时间复杂度。,5,35,a1,a2,a3,a4,0 1 2 3 4,42,24,12,33,a5,12,24,42,1.如果顺序表已空,抛出下溢异常 2.如果元素删除位置不存在,抛出位置异常 3.取出被删除的元素 4.将下标为i,i+1n-1的元素依次移到i-1,i,n-2的位置 5.将顺序表的长度减1,返回被删除的元素,算法描述伪代码,顺序表的实现删除,顺序表的实现删除,1.

15、如果顺序表已空,抛出下溢异常 2.如果元素删除位置不存在,抛出位置异常 3.取出被删除的元素 4.将下标为i,i+1n-1的元素一次移到i-1,i,n-2的位置 5.将顺序表的长度减1,返回被删除的元素,template T SeqList:Delete(int i) int x,j;if (length=0) throw “下溢“;if (ilength) throw “位置“;x=datai-1;for (j=i; jlength; j+)dataj-1=dataj; length-;return x; ,基本语句?,顺序表的实现删除,最好情况(i=n):基本语句执行0次,时间复杂度为O(

16、1)。 最坏情况(i=1):基本语句执行n-1次,时间复杂度为O(n)。 平均情况(1in):时间复杂度为O(n)。,时间性能分析,顺序表中的查找操作,两种查找方法 按位置查找,即查找指定位置上的元素 按值查找,即查找指定的值在顺序表中的位置,顺序表的实现按位查找,操作接口T Get(int i):查找第i个元素并返回其值,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,n,算法描述: template T SeqList:Get(int i) if (ilength) throw “查找位置非法“;else return datai-1; ,时间复杂度?,O(1),

17、顺序表的实现按值查找,操作接口int Locate(T x ):查找值为x的元素并返回其序号,5,35,a1,a2,a3,a4,0 1 2 3 4,42,24,12,33,a5,例:在(35, 33, 12, 24, 42) 中查找值为12的元素,返回在表中的序号。,顺序表的实现按值查找,template int SeqList:Locate(T x) for (int i=0; ilength; i+)if (datai=x) return i+1 ; /下标为i的元素等于x,返回其序号i+1return 0; /退出循环,说明查找失败 ,算法描述:,时间复杂度?,顺序表的实现按值查找,最好情况: 如果顺序表的第一个元素恰好就是 x ,算法只要比较一次就行了 最坏情况: 如果顺序表的最后一个元素是 x ,算法就要比较 n 个元素 平均情况: 假设数据是等概率分布,则平均要比较 n /2 个元素 时间复杂度为O(n),时间性能分析,顺序表的优缺点,顺序表的优点: 无需为表示表中元素之间的逻辑关系而增加额外的存储空间; 随机存取:可以快速地存取表中任一位置的元素。,顺序表的缺点: 插入和删除操作需要移动大量元素; 当线性表的长度变化较大时,难以确定存储空间的容量;表的容量难以扩充; 造成存储空间的碎片。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报