网站大量收购独家精品文档,联系QQ:2885784924

chap5数组与广义表.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap5数组与广义表

第五章 数组与广义表 四类基本结构: 5.1 数组的定义和运算 1.基本概念 2. 数组的抽象数据类型定义 3.数组的运算 5.4 广义表 5.4.2 广义表的存储方式 一次定位快速转置算法——算法原理 A第j列(B第j行)非零元素个数num[j]的计算: for(j=1;j=A.n;j++) num[j]=0; for(t=1;t=A.len;t++) num[A.data[t].col]++; A第j列(B第j行)第一个非零元素在三元组表B中的位置cpot[j]的计算公式如下 cpot[1] = 1; for(j=2;jA.n;j++) cpot[j] = cpot[j-1]+num[j-1]; 如何将计算postion[j]的方法稍加改动,使算法只占用一个辅助向量空间? 快速转置算法——算法步骤 Step 1:扫描矩阵A的三元组表,统计出A的每一列的非零元素的个数,存放到数组num[]中 (num[j] 存放M第j列的非零元素个数) Step 3:再次扫描矩阵A的三元组表,根据非零元素的列号j,确定它转置后的行号,查cpot表,按查到的位置直接将该项存入转置三元组表B中,并修改cpot[j] ,将其指向该行下一个元素的存储位置(cpot[j]++ )。 Step 2:计算转置矩阵B的每一行在三元组表中的开始位置,并存放到数组cpot[]中 (cpot[j] 存放T第j行开始位置) void FastTranspose( TSMatrix A,TSMatrix B ) { int num[MAXSIZE+1], cpot[MAXSIZE+1], j,t,q; B.m=A.n; B.n=A.m; B.len=A.len; if(B.len) { } } j=A.data[t].col; q=cpot[j]; B.data[q].row=A.data[t].col; B.data[q].col=A.data[t].row; B.data[q].e=A.data[t].e; cpot[j]++; for(j=1;j=A.n;j++) num[j]=0; for(t=1;t=A.len;t++) num[A.data[t].col]++; cpot[1]=1; for(j=2;j=A.n;j++) cpot[j]=cpot[j-1]+num[j-1]; for(t=1;t=A.len;t++) { } A.len A.n-1 A.len A.n 循环次数: A.n+A. len +A.n-1 +A.len 该算法的总的循环次数为: A.n+A. len +A.n-1 +A.len = 2(A.n + A. len)-1 时间复杂度为:O(A.n + A. len) 即使非零元个数A. len与A.m*A.n同数量级,其时间复杂度为O(A.m*A.n),与经典算法时间复杂度相同。 当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构,这时可以采用链式结构。 由于矩阵有行和列,所以一个结点除了数据域(row,col,val)之外,还应该用两个方向的指针(right, down),分别指向行和列。 这样,整个矩阵构成了一个十字交叉的链表,因此称十字链表。每一行或每一列的头指针,可以用两个一维指针数组来存放。 5.3.2 稀疏矩阵的十字链表表示 十字链表的类型定义 typedef struct OLNode { int row,col; ElemType e; struct OLNode *right,*down; }OLNode, *OLink; typedef struct { OLink *row_head OLink *col_head; int m,n,len; }CrossList; row col e right down OLNode x; CrossList M; M.len M.n M.m M.col_head M.row_head 1 1 -3 1 4 -5 2 2 -1 3 1 8 ∧ ∧ ∧ ∧ ∧ ∧ 0 0 0 0 8 0 -1 0 -5 0 0 -3 ∧ M.col_head M.row_head ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ 举例 稀殊矩阵: ②十字链表的建立 ——链表的插入 步骤: 1. 创建M.row_head, M.col_head动态数组, 2. 初始化M.row_head, M

文档评论(0)

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

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档