数组与广义表相关知识.ppt

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 数组和广义表;学习提要: 1.了解数组的两种存储表示方法,并掌握数组在以行为主的存储结构中的地址计算方法。 2.掌握对特殊矩阵进行压缩存储时的下标变换公式。 3.了解稀疏矩阵的两种压缩存储方法的特点和适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算采用的处理方法。 4.掌握广义表的结构特点及其存储表示方法。;ADT Array { 数据对象: D={aj1,j2, ...,,ji,jn| ji =0,...,bi -1, i=1,2,..,n } 数据关系: R={R1, R2, ..., Rn} Ri={aj1,... ji,... jn , aj1, ...ji +1, ...jn | 0 ? jk ? bk -1, 1 ? k ? n 且k ? i, 0 ? ji ? bi -2, i=2,...,n } } ADT Array ;基本操作:;InitArray(A, n, bound1, ..., boundn) 操作结果:若维数 n 和各维长度合法, 则构造相应的数组A,并 返回OK。; 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.2 数组的顺序表示和实现;;;称为基地址或基址;例5.1: 若 L=2, LOC[1,1] = 1000;推广到一般情况 n维数组的行序为主序存储地址计算公式 ;例: 在C语言中,设 数组A[5][6][7][8]的首地址为 2000, 每个元素占2个字节; 求元素A[3][4][5][4]的地址. LOC[3,4,5,4] = 2000 + (6*7*8*3 + 7*8*4 + 8*5 + 4)*2 = 2000 + ( 336*3 + 56*4 + 8*5 + 1*4)*2 = 2000 + (1008 + 224 + 40 + 4)*2 = 4552 ;列序为主序: (FORTRAN);数组顺序存储的表示和实现;练习; 5.3.1 特殊矩阵;; 以常规方法,即以二维数组表示 高阶的稀疏矩阵时产生的问题:;(1) 尽可能少存或不存零值元素;;5.3.1 特殊矩阵;按行序为主序:;例5.2 对称矩阵;三角矩阵;例5.3 下三角矩阵;对角矩阵;sa[k]和a[i,j]的一一对应关系: sa[k], k = 3*(i-1) + j-i, a[i, j] = 当 |i - j|=1 0 当 |i - j|1;例5.4 对角矩阵;5.3.2 稀疏矩阵;稀疏矩阵的压缩存储方法:; #define MAXSIZE 12500 typedef struct { int i, j; //该非零元的行下标和列下标 ElemType e; // 该非零元的值 } Triple; // 三元组类型;6 7 8 ;;用常规的二维数组表示时的算法;;解决思路: 只要做到 ?将矩阵行、列值互换; ?将每个三元组中的i和j相互调换; ?重排三元组次序,使T.data中元素以N的行(M的列)为主序;方法一:按M的列序转置 按T.data中三元组次序依次在M.data中找到相应的三元组进行转置,即按照矩阵M的列序来进行置换。 为找到M中每一列所有非零元素,需对其三元组表M.data从第一行起扫描一遍。由于M.data中以M行序为主序,

文档评论(0)

tangtianbao1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档