- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)