- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构线性表(顺序表)
线性结构四大特点 线性表 定义 记法 特点 结构 基本术语 空表、表长 直接前驱、直接后继 位序 线性表的抽象数据类型 数据对象 数据关系 操作集 初始化、销毁、查找、插入、删除、求前驱(后继)、遍历 顺序表 定义 特点 C描述 基本形态 基本操作实现 顺序表空:条件 L.length==0 不允许删除操作 顺序表满: 条件 L.length==MAXSIZE 不允许插入操作 不空也不满: 可以插入,删除操作 顺序表---- 基本算法 (1)初始化 (2)判空 (3)求表长 (4)取元素(取第i个元素 顺序表---- 基本算法 顺序表---- 基本算法 顺序表---- 基本算法 必备条件:表存在且不满 i值的合法性检查:1~L.length+1 将第i个到最后1个元素依次后移一个位置; 在i个位置插入元素; 表长增加1 。 顺序表---- 基本算法 必备条件:表非空 i值的合法性检查:1~L.length 取出第i个元素; 第i个元素以后的元素向前移动一个位置; 表长减小1 。 (9)求前驱 (10)求后继 顺序表---- 经典算法分析 线性表应用举例 例1:合并线性表 例2:归并线性表 例1:合并线性表 假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即:线性表中的数据元素即为集合中的成员。现要求一个新的集合A=A∪B。——去掉重复元素 算法分析 时间复杂度: O(ListLength(LA)*ListLength(LB)) 例2:归并线性表 已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。 ——不去掉重复元素 LC中的数据元素或是LA中的数据元素,或是LB中的数据元素。则先设LC为空表,然后将LA或LB中的元素逐个插入到LC中。为使LC表按值非递减有序排列,可设两个整型变量i、j,分别指向LA和LB,比较i、j所指元素的大小,决定哪个元素插入LC。插入后,在LA 或LB 中顺序后移。 算法分析 时间复杂度: O(ListLength(LA)+ListLength(LB)) Pn(x)=p0+p1x+p2x2+p3x3+……+pnxn Qn(x)=q0+q1x+q2x2+q3x3+……+qmxm 不失一般性,假设m≤n,则Rn(x)= Pn(x)+ Qm(x) 顺序表---- 基本算法 next=L.elem[i]; 在顺序表中查找元素cur_e,位序为i i=LocateElem(L,cur_e); cur_e是顺序表中元素,但不是最后一个元素便有直接后继next 时间复杂度为O(1) 在n+1处插入,不需移动 O(n) 移动元素 插入 删除第n个,不需移动 O(n) 移动元素 删除 最好情况 时间复杂度 平均移动次数 基本操作 算法 扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。 问题分析: 1.从线性表LB中依次取得每个数据元素; 2.依值在线性表LA中进行查访; 3.若不存在,则插入之。 GetElem(LB, i)→e LocateElem(LA, e, equal( )) ListInsert(LA, n+1, e) 操作步骤: GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给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 空间复杂度: O(1) 问题分析: void MergeList(List La, List Lb, List Lc) { // 本算法将非递减的有序表 La 和 Lb 归并为 Lc } // merge_list while ((i = La_len) (j = Lb_len)) { ……// La 和 Lb 均不空
文档评论(0)