- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2 数组 例2、已知二维数组Am,m按行存储的元素地址公式是: Loc(aij)= Loc(a11)+[(i-1)*m+(j-1)]*K , 按列存储的公式是? Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*K (尽管是方阵,但公式仍不同) 链式存储顺序存储方式:按低地址优先(或高地址优先)顺序存入一维数组。(难点是多维数组与一维数组的地址映射关系) 5.2 矩阵的压缩存储 二、稀疏矩阵1、稀疏矩阵的压缩存储 三元组单链表 行/列的单链表 方法三:用十字链表表示 三、广义表 2、广义表的存储结构 A =( ) B =(e) C =(a, (b,c,d)) E =(a, E) F =(( )) 如何只存储非零元素? 注意:稀疏矩阵中的非零元素的分布没有规律。 0 12 9 0 0 0 0 0 0 0 0 0 -3 0 0 0 14 0 0 0 24 0 0 0 0 18 0 0 0 0 15 0 0 -7 0 0 问题: 如果只存储稀疏矩阵中的非零元素,那这些元素的位置信息该如何表示? 解决思路: 对每个非零元素增开若干存储单元,例如存放其所在的行号和列号,便可准确反映该元素所在位置。 实现方法:1)三元组法 2)十字链表法 如:将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。 方法一:三元组 将稀疏矩阵中的每个非零元素表示为: (行号,列号,非零元素值)——三元组 {(0,2,11),(0,4,17),(1,1,20),(3,0,19), (3,5,28),(4,4,50)} value column row 元素值 列号 行号 可还原吗? 不可以,须再加一行“总体”信息:即总行数、总列数、非零元素总个数。 方法二:用三元组链表表示 用途:方便稀疏矩阵的加减运算; 方法:每个非0元素占用5个域。 row:存储非零元素的行号 col:存储非零元素的列号 item:存储非零元素的值 right:指针域,指向同一行中的下一个三元组 down:指针域,指向同一列中的下一个三元组 right down item col row 十字链表的特点: ①每行非零元素链接成带表头结点的链表(或循环链表) ; ②每列非零元素也链接成带表头结点的链表(或循环链表)。 则每个非零元素既是行链表中的一个结点;又是列链表中的一个结点,即呈十字链状。 2 0 2 ∧ M= 3 0 0 5 0 1 0 0 2 0 0 0 0 0 3 0 3 5 ∧ ∧ 1 1 1 ∧ ∧ ∧ 稀疏矩阵的压缩存储——十字链表(实例) ∧ rhead chead ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ 1、 广义表的定义 广义表是线性表的推广,也称为列表(lists) 记为: LS = ( a1 , a2 , ……, an ) 广义表名 表头(Head) 表尾 (Tail) ① 第一个元素是表头,而其余元素组成的表称为表尾; ② 用小写字母表示原子类型,用大写字母表示列表。 n是表长 在广义表中约定: 讨论:广义表与线性表的区别和联系? 广义表中元素既可以是原子类型,也可以是列表; 当每个元素都为原子且类型相同时,就是线性表。 广义表的逻辑结构:直接元素之间是线性关系,1对1。 常用术语: 长度:广义表LS中的直接元素的个数; 深度:广义表LS中括号的最大嵌套层数。 表头:广义表LS非空时,称第一个元素为LS的表头; 表尾:广义表LS中除表头外其余元素组成的广义表。 E=(a,E)=(a,(a,E))= (a,(a,(a,…….))),E为递归表 1)A =( ) 2)B = ( e ) 3)C =( a ,( b , c , d ) ) 4)D=( A , B ,C ) 5)E=(a, E) 实训1:求下列广义表的长度。 n=0,因为A是空表 n=1,表中元素e是原子类型 n=2,a 为原子,(b,c,d)为子表 n=3,3个元素都是子表 n=2,a 为原子,E为子表 D=(A,B,C)=(( ),(e),(a,(b,c,d))),共享表 A B D C e a b c d ② A=( a , (b, A) ) 实训2:试用
文档评论(0)