[2018年最新整理]ch5数组和广义表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[2018年最新整理]ch5数组和广义表

第 五章 广义线性表-数组和广义表 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表 5.1 数组的定义和特点 5.1.1 定义 5.2 数组的顺序存储结构 5.2.1 次序约定 以行序为主序 以列序为主序 稀疏矩阵的压缩存储方法 A. 顺序存储结构---三元组表 三元组表的数据类型: B. 求转置矩阵 问题描述:已知一个稀疏矩阵的三元组表,求该矩阵转置矩阵的三元组表 问题分析 一般矩阵转置算法: 三元组表转置: void TransposeMatrix(Matrix A, Matrix B) { /*把矩阵A转置到B所指向的矩阵中去, 矩阵用三元组表表示 */ B.mu= A.nu ; B.nu= A.mu ; B.tu= A.tu ;  if(A.tu0) { 为了能将待转置三元组表A中元素一次定位到三元组表B的正确位置上,需要预先计算以下数据: (1)待转置矩阵A每一列中非零元素的个数(即转置后矩阵每一行中非零元素的个数)。 (2)待转置矩阵A每一列中第一个非零元素在三元组表B中的正确位置。 void FastTransMatrix (Matrix A, Matrix B) {  B.mu= A.nu ; B.nu= A.mu ; B.tu= A.tu ;  if(B.tu0) {   for(col=0; colA.nu; col++) num[col]=0;  for(t=0; tA.tu; t++) {n= A.data[t].col; num[n]++;} cpot[0]=0;  for(col=1; colA.nu; col++)  cpot[col]=cpot[col-1]+num[col-1]; /*求col列中第一个非零元素在B.data[ ]中的下标 */ 十字链表 设行指针数组和列指针数组,分别指向每行、列第一个非零元 结点定义 4.3.3 广义表的存储结构 表中数据元素类型不统一——采用链式存储结构 *广义表的表尾一定是一个表。任何一个非空的广义表都可以分解成表头和表尾两部分,一对确定的表头和表尾可以唯一地确定一个广义表. ——采用头尾表示法存储广义表 例:广义表D=(( ),(e),(a,(b,c,d)))的链式存储结构示意图 这种存储结构的特点 容易分清列表中原子和子表所在的层次 最高层的表结点的个数即为表的层次 tp域指向列表表尾,(除非表尾为空则指针为空,否则必为表结点)。 思考: 1.已知广义表L=((x,y,z),(u,t,w)) ,用tail和head运算从L表中取出原子t。 2.广义表(a,(a,b),d,e,((i,j),k)) 的长度和深度各是多少? 方法二:一次定位快速转置算法 依次按三元组表A的次序进行转置,转置后直接放到三元组表B的正确位置上。这种转置算法称为快速转置算法。  需要设两个数组: num[col]:用来存放三元组表A中第col列中非零元素个数(三元组表B中第col行非零元素的个数)。计算方法:  将三元组表A扫描一遍,对于其中列号为k的元素,给相应的num[k]加1。 cpot[col]:用来存放转置前三元组表A中第col列(转置后三元组表B中第col行)中第一个非零元素在三元组表B中的正确位置。 计算方法:  cpot[0]=0 cpot[col]=cpot[col-1]+num[col-1](1≤col≤nu)。 算法实现: 计算A中每一列的非零元素的个数 计算A中每一列的第一个非零元素在B中的下标 依次取A中的每一个非零元素对应的三元组: 3.1 确定该元素在B中的下标pb 3.2 将该元素的行列号交换后存入B中pb的位置 3.3 预置该元素所在列的下一个元素的存放位置(cpot[col]加1)  for(p=0; pA.tu; p++) //扫描A三元组表并依次转置 { j=A.data[p].col; //A中当前三元组的列号 k=cpot[j];  //当前三元组在B中的下标 B.data[k].row=A.data[p].col;  B.data[k].col=A.data[p].row; 

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档