- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]数据结构第5章数组和广义表
数据结构课程的内容 第5章 数组和广义表(Arrays Lists) 5.1 数组的定义 二维数组的特点: N维数组的数据类型定义 基本操作 InitArray(A, n, bound1, ..., boundn) 操作结果:若维数n和各维长度合法,则构造相应的数组A,并返回OK。 DestroyArray(A) 操作结果:销毁数组A。 Value(A, e, index1, ..., indexn) 初始条件:A是n维数组,e为元素变量,随后是n个下标值。 操作结果:若各下标不超界,则e赋值为所指定的A的元素值,并返回OK。 Assign(A, e, index1, ..., indexn) 初始条件:A是n维数组,e为元素变量,随后是n个下标值。 操作结果:若下标不超界,则将e的值赋给所指定的A的元素,并返回OK。 第5章 数组和广义表(Arrays Lists) 5.2 数组的顺序存储表示和实现 二维数组元素地址的通式 设一般的二维数组是A[c1..d1, c2..d2],这里c1,c2不一定是0。 例2:已知二维数组Am,m按行存储的元素地址公式是: Loc(aij)= Loc(a11)+[(i-1)*m+(j-1)]*K , 按列存储的公式是? Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*K (尽管是方阵,但公式仍不同) 若是N维数组,其中任一元素的地址该如何计算? Loc(j1,j2,…jn)=LOC(0,0,…0)+ N维数组的顺序存储表示(见教材P93) 顺序存储方式:按低地址优先(或高地址优先)顺序存入一维数组。 第5章 数组和广义表(Arrays Lists) 5.3 矩阵的压缩存储(数组的应用) 一、稀疏矩阵的压缩存储 例1 : 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。 法三:用带辅助向量的三元组表示。 方法: 增加2个辅助向量: ① 记录每行非0元素个数,用NUM(i)表示; ② 记录稀疏矩阵中每行第一个非0元素在三元组中的行号,用POS(i)表示。 法四:用十字链表表示 二、稀疏矩阵的操作 方法1:压缩转置 方法2 快速转置 设计思路: 令:M中的列变量用col表示; num[ col ]:存放M中第col 列中非0元素个数, cpot[ col ]:存放M中第col列的第一个非0元素的位置, (即b.data中待计算的“恰当”位置所需参考点) 第5章 数组和广义表(Arrays Lists) 5.4 广义表的定义 2、特点: 有次序性 有长度 有深度 可递归 可共享 第5章 数组和广义表(Arrays Lists) 5.5 广义表的存储结构 1、主要时间消耗在查找M.data[p].j=col的元素,由两重循环完成: for(col=1; col=M.nu; col++) 循环次数=nu {for(p=1; p=M.tu; p++) 循环次数=tu 所以该算法的时间复杂度为O(nu*tu) ----即M的列数与M中非零元素的个数之积 最恶劣情况:M中全是非零元素,此时tu=mu*nu, 时间复杂度为 O(nu2*mu ) 结论:压缩转置算法不能滥用。 前提:仅适用于非零元素个数很少(即tumu*nu)的情况。 压缩转置算法的效率分析: 三 元 组 表 a.data 三 元 组 表 b.data ③ (1, 3, -3) ① (2 ,1, 12) ⑥ (2, 5, 18) ② (3, 1, 9) ⑧ (4, 6, -7) ④ (5, 3, 14) ⑦ (1, 6, 15) ⑤ (3, 4, 24) (6, 4, -7) (6, 1, 15) (5, 2, 18) (4, 3, 24) (3, 5, 14) (3, 1, -3) (1, 3, 9 ) (1, 2, 12) 思路:依次把a.data中的元素直接送入b.data的恰当位置上(即M三元组的p指针不回溯)。 关键:怎样寻找b.data的“恰当”位置? p 1 2 3 4 q 3 5 如果能预知M矩阵每一列(即T的每一行)的非零元素个数,又能预知第一个非零元素在b.data中的位置,则扫描a.data时便可以将每个元素准确定位(因为已知若干参考点)。 技巧:利
文档评论(0)