收藏 分享(赏)

数据结构线性表(顺序表).ppt

上传人:HR专家 文档编号:8044823 上传时间:2019-06-05 格式:PPT 页数:48 大小:600.50KB
下载 相关 举报
数据结构线性表(顺序表).ppt_第1页
第1页 / 共48页
数据结构线性表(顺序表).ppt_第2页
第2页 / 共48页
数据结构线性表(顺序表).ppt_第3页
第3页 / 共48页
数据结构线性表(顺序表).ppt_第4页
第4页 / 共48页
数据结构线性表(顺序表).ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、第二章 线性表,顺序表,线性结构四大特点,第一个元素无直接前驱,最后一个元素无直接后继,除第一个元素外,其他每个数据元素都有唯一一个直接前驱,除最后一个元素外,其他每个数据元素都有唯一一个直接后面,线性表,定义记法特点结构基本术语 空表、表长 直接前驱、直接后继 位序,最基本、最常用的线性结构。若n(n0)个数据特性相同的数据元素组成的有限序列。,(a1,a2,ai-1,ai,ai+1,an),1.同一线性表中的数据元素必须具有相同特性 2.具有线性结构的四大特性 3.数据元素之间存在序偶关系,逻辑结构(1对1)、物理结构(顺序存储和链式存储),线性表的抽象数据类型,数据对象数据关系操作集初始

2、化、销毁、查找、插入、删除、求前驱(后继)、遍历,线性表中的数据元素具有相同特性,相邻数据元素之间存在序偶关系,线性表的基本操作声明,仅是模型定义,不涉及模型实现,参数不必考虑具体数据类型,实际应用中,具体问题具体分析。,顺序表,定义特点C描述 基本形态 基本操作实现,用一组地址连续的存储单元依次存放线性表中的数据元素。采用这种存储结构的线性表叫做顺序表。,a1 a2 ai-1 ai an,基地址,1.数据元素在“逻辑关系上的相邻”用“物理地址相邻”来表示。 2.顺序表中任一元素都可“随机存取”。,typedef struct SqList; / 俗称 顺序表,#define MAXSIZE

3、100 / 线性表存储空间的分配量,即数组长度,ElemType elemMAXSIZE;,int length; / 当前长度,顺序表的C描述,顺序表空:条件 L.length=0不允许删除操作 顺序表满:条件 L.length=MAXSIZE不允许插入操作 不空也不满:可以插入,删除操作,顺序表的基本形态,顺序表- 基本算法,根据顺序表的实现形式,表长length是类型定义的属性,可以实现求表长、初始化、取值、判空等操作,时间复杂度均为O(1)。,而遍历算法、查找表中元素的存在、插入、删除等操作,时间复杂度均为O(n)。,(1)初始化,空表,时间复杂为:O(1),顺序表- 基本算法,L.l

4、ength=0;,(2)判空,时间复杂为:O(1),顺序表- 基本算法,if(L.length=0)return OK; else return ERROR;,(3)求表长,时间复杂为:O(1),顺序表- 基本算法,return L.length;,(4)取元素(取第i个元素,e),时间复杂为:O(1),顺序表- 基本算法,e=L.elemi-1;,i合法,if(i=1 ,顺序表- 基本算法,(5)遍历,for ( i=1; i=L.length; i+ )visit( L.elemi-1 );,时间复杂为:O(L.length),顺序表- 基本算法,(6)查找,搜索顺序表中是否存在指定的数据

5、元素。存在,查找成功;否则,查找失败。,例如:顺序表,e =,38,i,1,2,3,4,1,8,50,可见,基本操作是: 将顺序表中的元素 逐个和给定值 e 相比较。,算法的时间复杂度为:,O( L.length ),int LocateElem(SqList L,Elemtype e)for(i=1 ;i=L.length;i+)if(e=L.elemi-1)return i;return 0; ,顺序表- 基本算法,(7)插入,在顺序表中插入指定的数据元素,插入成功,表长增1。,线性表操作ListInsert(&L, i, e)的实现:,首先分析:,插入元素时, 线性表的逻辑结构发生什么变

6、化?,(a1, , ai-1, ai, , an) 改变为(a1, , ai-1, e, ai, , an), ,必备条件:表存在且不满 i值的合法性检查:1L.length+1 将第i个到最后1个元素依次后移一个位置;在i个位置插入元素;表长增加1 。,分析:,例如:ListInsert_Sq(L, 5, 66),L.length-1,0,87,56,42,66,O( L.length ),算法的时间复杂度为:,Status ListInsert ( SqList ,插入算法时间复杂度分析:考虑移动元素的平均情况,插入位置,需要移动的结点次数,1,n,2,n-1,n,1,n+1,0,平均次数

7、:,(1+2+n-1+n)/(n+1) =n/2,T(n)=O(n),顺序表- 基本算法,(8)删除,在顺序表中删除指定位置的数据元素,删除成功,表长减1。,线性表操作ListDelete(&L, i, &e)的实现:,首先分析:,删除元素时, 线性表的逻辑结构发生什么变化?,(a1, , ai-1, ai, ai+1, , an) 改变为(a1, , ai-1, ai+1, , an),ai+1,an, ,表的长度减少,必备条件:表非空 i值的合法性检查:1L.length 取出第i个元素;第i个元素以后的元素向前移动一个位置;表长减小1 。,分析:,L.length-1,0,87,56,例

8、如:ListDelete_Sq(L, 5, e),算法时间复杂度为:,O( L.length),Status ListDelete ( SqList ,删除算法时间复杂度分析:考虑移动元素的平均情况,删除位置,需要移动的结点次数,1,n-1,2,n-2,n,0,平均次数:,(0+1+n-11)/n =(n-1)/2,T(n)=O(n),时间复杂度为O(1),顺序表- 基本算法,(9)求前驱,pre=L.elemi-2;,在顺序表中查找元素cur_e,位序为i,i=LocateElem(L,cur_e);,cur_e是顺序表中元素,但不是第一个元素便有直接前驱pre,顺序表- 基本算法,(10)

9、求后继,next=L.elemi;,在顺序表中查找元素cur_e,位序为i,i=LocateElem(L,cur_e);,cur_e是顺序表中元素,但不是最后一个元素便有直接后继next,时间复杂度为O(1),顺序表- 经典算法分析,线性表应用举例,例1:合并线性表例2:归并线性表,例1:合并线性表,假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即:线性表中的数据元素即为集合中的成员。现要求一个新的集合AAB。去掉重复元素,扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。,问题分析:,1从线性表LB中依次取得每个数据元素;,2依值

10、在线性表LA中进行查访;,3若不存在,则插入之。,GetElem(LB, i)e,LocateElem(LA, e, equal( ),ListInsert(LA, n+1, e),操作步骤:,GetElem(Lb, i, e); / 取Lb中第i个数据元素赋给eif (!LocateElem(La, e, equal( ) ) ListInsert(La, +La_len, e);/ La中不存在和 e 相同的数据元素,则插入之,void union(List ,for (i = 1; i = Lb_len; i+) , / union,算法分析,时间复杂度:O(ListLength(LA)

11、*ListLength(LB),空间复杂度:O(1),例2:归并线性表,已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。 不去掉重复元素,LC中的数据元素或是LA中的数据元素,或是LB中的数据元素。则先设LC为空表,然后将LA或LB中的元素逐个插入到LC中。为使LC表按值非递减有序排列,可设两个整型变量i、j,分别指向LA和LB,比较i、j所指元素的大小,决定哪个元素插入LC。插入后,在LA 或LB 中顺序后移。,问题分析:,void MergeList(List La, List Lb, List &Lc

12、) / 本算法将非递减的有序表 La 和 Lb 归并为 Lc / merge_list,while (i = La_len) & (j = Lb_len) / La 和 Lb 均不空 while (i=La_len) / 若 La 不空 while (j=Lb_len) / 若 Lb 不空,InitList(Lc); / 构造空的线性表 Lc i = j = 1; k = 0; La_len = ListLength(La); Lb_len = ListLength(Lb);,GetElem(La, i, ai); GetElem(Lb, j, bj);if(ai=bj)ListInsert(

13、Lc, +k, ai);+i;elseListInsert(Lc, +k, bj);+j;,while (i = La_len) / 当La不空时GetElem(La, i+, ai); ListInsert(Lc, +k, ai); / 插入 La 表中剩余元素,while (j = Lb_len) / 当Lb不空时GetElem(Lb, j+, bj);ListInsert(Lc, +k, bj); / 插入 Lb 表中剩余元素,算法分析,时间复杂度: O(ListLength(LA)+ListLength(LB),空间复杂度: O(ListLength(LA)+ListLength(LB

14、),void MergeList(SqList La,SqList Lb,SqList ,if( *pa*pb )*pc+ =*pa+; else if(*pa=*pb)*pc+=*pa+;pb+; else*pc+ = *pb+;,一元多项式,Pn(x)=p0+p1x+p2x2+p3x3+pnxnQn(x)=q0+q1x+q2x2+q3x3+qmxm,其中系数组成的线性表 P=(p0,p1,p2,p3,pn),系数pi的序号为每一项的指数i,其中系数组成的线性表 Q=(q0,q1,q2,q3,qm),一元多项式,不失一般性,假设mn,则Rn(x)= Pn(x)+ Qm(x),其中系数组成的线性表 R=(p0+q0, p1+q1, p2+q2,pm+qm,pm+1,pn),顺序存储很容易实现一元多项式的相加,

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

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

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


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

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

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