数据结构课件:第2章线性表 (1).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构课件:第2章线性表 (1).ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课件:第2章线性表 1 数据结构 课件 线性
- 资源描述:
-
1、数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院逻辑结构唯一逻辑结构唯一存储结构不唯一存储结构不唯一运算的实现依赖运算的实现依赖于存储结构于存储结构数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院第第2 2章章 线性表线性表第第3 3章章 栈和队列栈和队列第第5 5章章 数组和广义表数组和广义表 线性结构线性结构在数据元素的非空有限集中,有且仅有一个开在数据元素的非空有限集中,有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。一个直接前趋和一个直接后继。可表示为可表示为:(:
2、(a1 , a2 , , an) 线性结构的特点:线性结构的特点:(逻辑、存储(逻辑、存储和运算)和运算)数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性结构包括线性表、堆栈、队列、字符串、数线性结构包括线性表、堆栈、队列、字符串、数组等等,其中,最简单、最常用的是组等等,其中,最简单、最常用的是-线性表线性表简言之,线性结构反映结点间的逻辑关系是简言之,线性结构反映结点间的逻辑关系是 一对一一对一 的的见第见第2章章数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院一、教学内容一、教学内容:1 1、线性表的定义和性质及基本运算;线性表的定义和性质及基
3、本运算;2 2、 线性表的顺序存储结构线性表的顺序存储结构3 3、 线性表的链式存储结构线性表的链式存储结构4 4、 多项式的代数运算多项式的代数运算数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院二、教学要求:二、教学要求:1 1、了解线性表的逻辑结构特性,以及线性表的两种存储实现方式了解线性表的逻辑结构特性,以及线性表的两种存储实现方式2 2、熟练掌握两种存储结构的描述方法。链表是本章的重点和难点。、熟练掌握两种存储结构的描述方法。链表是本章的重点和难点。3 3、熟练掌握顺序表的定义与实现,包括查找、插入、删除算法的、熟练掌握顺序表的定义与实现,包括查找、插入、删除算法
4、的实现;实现;4 4、熟练掌握在各种链表结构中实现线性表操作的基本方法,能在、熟练掌握在各种链表结构中实现线性表操作的基本方法,能在实际应用中选用适当的链表结构;实际应用中选用适当的链表结构;5 5、能够从时间和空间复杂度的角度综合比较线性表两种存储结、能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合构的不同特点及其适用场合。数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院(a1, a2, ai-1,ai, ai1 ,, an)1. 线性表的定义:线性表的定义:是是n个数据元素的有限序列个数据元素的有限序列n=0时称为时称为数据元素数据元素线性起
5、点线性起点ai的直接前趋的直接前趋ai的直接后继的直接后继下标,下标,是元素的是元素的序号,表示元素序号,表示元素在表中的位置在表中的位置n为元素总个为元素总个数,即表长数,即表长空表空表线性终点线性终点数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院例例1 1 分析分析26 26 个英文字母组成的英文表个英文字母组成的英文表 ( A, B, C, D, , Z)学号学号姓名姓名性别性别年龄年龄班级班级2001011810205于春梅于春梅女女 182001级电信级电信016班班2001011810260何仕鹏何仕鹏男男 182001级电信级电信017班班200101181
6、0284王王 爽爽女女 182001级通信级通信011班班2001011810360王亚武王亚武男男 182001级通信级通信012班班: :例例2 分析学生情况登记表分析学生情况登记表数据元素都是记录数据元素都是记录; 元素间关系是线性元素间关系是线性数据元素都是字母数据元素都是字母; 元素间关系是线性元素间关系是线性同一线性表中的元素必定具有相同特性同一线性表中的元素必定具有相同特性数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性表的抽象数据类型的定义:线性表的抽象数据类型的定义: ADT List 数据对象:数据对象:D=ai|aiElemset,i=1,2,n,
7、n0 数据关系:数据关系:R1=|ai-1,aiD,i=2,n 基本操作:基本操作: InitList(&l) 操作结果:构造一个空的线性表操作结果:构造一个空的线性表L DestroyList(&l) 初始条件:线性表已存在初始条件:线性表已存在 操作结果:销毁线性表操作结果:销毁线性表L 数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院 ClearList(&l) 初始条件:线性表已存在初始条件:线性表已存在 操作结果:置线性表操作结果:置线性表L为空表为空表 ListEmpty(L) 初始条件:线性表已存在初始条件:线性表已存在 操作结果:若线性表操作结果:若线性表L
8、为空表,则返回为空表,则返回TRUE,否则返回,否则返回FALSE ListLenght(L) 初始条件:线性表已存在初始条件:线性表已存在 操作结果:返回线性表操作结果:返回线性表L数据元素个数数据元素个数 GetElem(L,i,&e) 初始条件:线性表已存在(初始条件:线性表已存在(1iListLenght(L)) 操作结果:用操作结果:用e返回线性表返回线性表L中第中第i个数据元素的值个数据元素的值数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院 locatElem(L,e,comare() 初始条件:线性表已存在初始条件:线性表已存在,comare()是数据元素判
9、定函数是数据元素判定函数 操作结果:返回线性表操作结果:返回线性表L中第中第1个与个与e满足关系满足关系comare()的数的数据元素的位序据元素的位序 PriorElem(L,cur_e,&pre_e) 初始条件:线性表已存在初始条件:线性表已存在 操作结果:若操作结果:若cur_e是线性表是线性表L的数据元素,且不是第一个,的数据元素,且不是第一个,则用则用pre_e返回它的前驱,否则操作失败,返回它的前驱,否则操作失败,pre_e无定义无定义 NextElem(L,cur_e,&) 初始条件:线性表已存在初始条件:线性表已存在 操作结果:若操作结果:若cur_e是线性表是线性表L的数据元
10、素,且不是第最后一的数据元素,且不是第最后一个,则用个,则用next_e返回它的后继,否则操作失败,返回它的后继,否则操作失败,next_e无定义无定义数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院 ListInsert(&L,i,e) 初始条件:线性表已存在(初始条件:线性表已存在(1iListLenght(L)+1) 操作结果:在线性表操作结果:在线性表L中第中第i个数据元素之前插入新元素个数据元素之前插入新元素e,L长度加长度加1 ListDelete(&L,i,&e) 初始条件:线性表已存在(初始条件:线性表已存在(1iListLenght(L)) 操作结果:删除
11、线性表操作结果:删除线性表L中第中第i个数据元素,用个数据元素,用e返回其值,返回其值,L长度减长度减1 ListTraverse(L,visit() 初始条件:线性表已存在初始条件:线性表已存在 操作结果:依次对线性表操作结果:依次对线性表L的每个数据元素调用的每个数据元素调用visit()函函数,一旦数,一旦visit()失败,则操作失败失败,则操作失败 ADT List数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院上述是线性表抽象数据类型的定义,其中只是一些上述是线性表抽象数据类型的定义,其中只是一些基本操作,另外可以更复杂。如:将两个线性表合基本操作,另外可以更复
12、杂。如:将两个线性表合并等。复杂的操作可用基本操作实现。并等。复杂的操作可用基本操作实现。例例2-12-1假设假设: :有两个集合有两个集合 A 和和 B 分别用两个线性表分别用两个线性表 LA 和和 LB 表示,表示, 现要求一个新的集合现要求一个新的集合AAB 作如下操作:作如下操作:扩大线性表扩大线性表 LA,将存在于线性表,将存在于线性表LB 中而不存在于中而不存在于线性表线性表 LA 中的数据元素插入到线性表中的数据元素插入到线性表 LA 中去。中去。数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院 GetElem(Lb, i, e); / 取取Lb中第中第i个数
13、据元素赋给个数据元素赋给e if (!LocateElem(La, e, equal( ) ) ListInsert(La, +La_len, e); / La中不存在和中不存在和 e 相同的数据元素,则插入之相同的数据元素,则插入之void union(List &La, List Lb) La_len = ListLength(La); / 求线性表的长度求线性表的长度 Lb_len = ListLength(Lb); for (i = 1; i = Lb_len; i+) / union数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院例例2-2La和和Lb是按非递减有
14、序排列是按非递减有序排列,构建构建Lcvoid MergeList(List la,List lb,list &lc) IninList(lc); I=j=1;k=0; la_len=ListLength(la);lb_len=ListLength(lb);while(I=la_len&j=lb_len)GetElem(la,I,ai);GetElem(lb,j,bj);if(ai=bj)ListList(lc,+k,ai);I+;else ListInsert(lc,k+,bj);j+;数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院while(I=la_len)GetE
15、lem(la,I+,ai);ListInsert(lc,k+,ai);while(j=lb_len)GetElem(lb,j+,bj);ListInsert(lc,k+,bj);数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院时间复杂度分析时间复杂度分析假设假设GetElem和和ListInsert与表长无关与表长无关,LocateElem的执行时间与表长成正比的执行时间与表长成正比.例例2.1的时间复杂度为的时间复杂度为O(ListLength(LA) *ListLength(LB)例例2.2的时间复杂度为的时间复杂度为O(ListLength(LA)+ListLengt
16、h(LB)数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院2.2.1 顺序表的表示顺序表的表示2.2.2 顺序表的实现顺序表的实现2.2.3 顺序表的运算效率分析顺序表的运算效率分析本节小结本节小结数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院2.2.1 2.2.1 顺序表的表示顺序表的表示用一组地址连续的存储单元依次用一组地址连续的存储单元依次存储线性表的元素,可通过数组来实现。存储线性表的元素,可通过数组来实现。把逻辑上相邻的数据元素存储在物把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。理上相邻的存储单元中的存储结构。线性表的顺序表
17、示又称为线性表的顺序表示又称为顺序存储结构顺序存储结构或或顺序映像顺序映像。顺序存储定义:顺序存储定义:顺序存储方法:顺序存储方法:简言之,逻辑上相邻,物理上也相邻简言之,逻辑上相邻,物理上也相邻数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性表顺序存储特点:1. 逻辑上相邻的数据元素,其物理上也相邻;逻辑上相邻的数据元素,其物理上也相邻;2. 若已知表中首元素在存储器中的位置,则其他元素若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出存放位置亦可求出(利用数组下标)(利用数组下标)。3. 计算方法是计算方法是设首元素设首元素a1的存放地址为的存放地址为LO
18、C(a1)(称称为首地址为首地址)设每个元素占用存储空间(地址长度)为设每个元素占用存储空间(地址长度)为L字节,字节,则表中任一数据元素的则表中任一数据元素的存放地址存放地址为:为: LOC(ai) = LOC(a1) + L *(i-1) LOC(ai+1) = LOC(ai)+L 4.可随机存取可随机存取数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性表的顺序存储结构示意图线性表的顺序存储结构示意图a a1 1a a2 2a ai ia ai+1i+1a an n 地址地址 内容内容 元素在表中的位序元素在表中的位序1 1i i2 2n n空闲区空闲区i+1i+1
19、Lb=LOC(a1)b + + L Lb +(i-1)+(i-1)L Lb +(n-1)+(n-1)L Lb +(max-1)+(max-1)L L数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院一个一维数组,下标的范围是到,一个一维数组,下标的范围是到,每个数组元素用相邻的每个数组元素用相邻的个字节个字节存储。存储器存储。存储器按字节编址,设存储数组元素按字节编址,设存储数组元素 的第一个的第一个字节的地址是字节的地址是,则,则 的第一个字节的的第一个字节的地址是地址是 113因此:因此:LOC( M3 ) = 98 + 5 (3-0) =113解:解:地址计算通式为:地
20、址计算通式为:LOC(ai) = LOC(a1) + L *(i-1)数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性表的顺序存储结构定义(静态)线性表的顺序存储结构定义(静态)#define MAXSIZE 100typedef struct ElemType elemMAXSIZE; int length;SqList;数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性表的顺序存储结构定义线性表的顺序存储结构定义(动态动态)typedef struct SqList; #define LIST_INIT_SIZE 100 / 线性表存储空间的初
21、始分配量线性表存储空间的初始分配量#define LISTINCREMENT 10 / 线性表存储空间的分配增量线性表存储空间的分配增量ElemType *elem; / 存储空间基址存储空间基址int length; / 当前长度当前长度int listsize; / 当前分配的存储容量当前分配的存储容量 / (以以sizeof(ElemType)为单位为单位)数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院线性表的基本操作在顺序表中的实现线性表的基本操作在顺序表中的实现InitList(&L) / 结构初始化结构初始化LocateElem(L, e, compare()
22、 / 查找查找ListInsert(&L, i, e) / 插入元素插入元素ListDelete(&L, i) / 删除元素删除元素数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院Status InitList_Sq( SqList& L ) / 构造一个空的线性表 / InitList_Sq算法时间复杂度时间复杂度:O(1)L.elem = (ElemType*) malloc (LIST_ INIT_SIZE sizeof (ElemType);if (!L.elem) exit(OVERFLOW);L.length = 0;L.listsize = LIST_INIT
23、_SIZEreturn OK;数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院2.2.2 2.2.2 顺序表的实现(或操作)顺序表的实现(或操作)回忆回忆:数据结构基本运算操作有:数据结构基本运算操作有:插入、删除插入、删除、查找、排序、修改查找、排序、修改数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院1)1)插入插入 在线性表的第在线性表的第i i个位置个位置前前插入插入一个元素一个元素实现步骤:实现步骤: 将第将第n至第至第i 位的元素向后移动一个位置;位的元素向后移动一个位置; 将要插入的元素写到第将要插入的元素写到第i个位置;个位置; 表长加表
24、长加1。注意:注意:事先应判断事先应判断: 插入位置插入位置i 是否合法是否合法?表是表是否已满否已满? 长度为长度为n的线性表变为长度为的线性表变为长度为n+1的线性表的线性表 (a1,a2,ai-1,ai,an)(a1,a2,ai-1,x,ai,an)数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院内存a1a2aiai+1an01i-1V数组下标n-1in12i元素序号i+1nn+1内存a1a2aiai+1an01i-1V数组下标n-1in12i元素序号i+1nn+1an-1x数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院程序:程序:Status
25、ListInsert_sq(SqList &l,int i,elemtype x)if (il.length) return(ERROR);if(l.length=MAXSIZE) return(OVERFLOW);for(j=l.length;j=i;j-) l.elemj=l.elemj-1;l.elemj=x;l.length+;return(OK);数数 据据 结结 构构武武 汉汉 大大 学学 测测 绘绘 学学 院院实现步骤:实现步骤: 将第将第i +1至第至第n 位的元素向前移动一个位置;位的元素向前移动一个位置; 表长减表长减1。注意:注意:事先需要判断,事先需要判断,删除位置删除
展开阅读全文