算法与数据结构第五章数组和广义表.ppt.ppt

算法与数据结构第五章数组和广义表.ppt.ppt

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

第五章 数组和广义表 5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 5.3.2 稀疏矩阵 5.4 广义表的定义 5.5 广义表的存储结构 cpot[0..n]:由递推关系得出M中的每列第一个非零元素在B中的位置。 算法通过cpot数组建立位置对应关系: cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1] 2=cpl=a.n 例如:图5.4中的矩阵M和相应的三元组A可以求得num[col]和 cpot[col]的值如下: col 1 2 3 4 5 6 7 num[col] 2 2 2 1 0 1 0 cpot[col] 1 3 5 7 8 8 9 v 2 1 … q A i j v 第一列元素个数 第二列元素个数 第三列元素个数 num cpot q=cpot[col] v 1 2 p p 快速转置算法如下: void fasttranstri(tritupletable b,tritupletable a){ int p,q,col,k; int num[0..a.n],copt[0..a.n]; b.m=a.n; b.n=a.m; b.t=a.t; if(b.t=0) printf(“a=0”\n); for(col=1;col=a.u;++col) num[col]=0; for(k=1;k=a.t;++k) ++num[a.data[k].j]; cpot[0]=1; for(col=2;col=a.t;++col) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p=a.t;++p){ col=a.data[p].j; q=cpot[col]; b.data[q].i=a.data[p].j; b.data[q].j=a.data[p].i; b.data[q].v=a.data[p].v; ++cpot[col]; } } } 二、带行表的三元组 有时为了方便某些矩阵运算,我们在按行优先存储的三元组中,加入一个行表来记录稀疏矩阵中每行的非零元素在三元组表中的起始位置。当将行表作为三元组表的一个新增属性加以描述时,我们就得到了稀疏矩阵的另一种顺序存储结构:带行表的三元组表。其类型描述如下: * 太 原 科 技 大 学 计 算 机 学 院 数组和广义表可看成是一种特殊的线性表,其特殊在于,表中的数所元素本身也是一种线性表。 5.1 数组的定义 数组是我们最熟悉的数据类型,在早期的高级语言中,数组是唯一可供使用的数据类型。由于数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和下界,因此,数组的处理比其它复杂的结构更为简单。多维数组是向量的推广。例如,二维数组: a11 a12 … a1n a21 a22 … a2n … … … … am1 am2 … amn Amn= 可以看成是由个行向量组成的向量,也可以看成是个列向量组成的向量。在C语言中,一个二维数组类型可以定义为其分量类型为一维数组类型的一维数组类型,也就是说, typedef elemtype array2[m][n]; 等价于: typedef elemtype array1[n]; typedef array1 array2[m]; 同理,一个维数组类型可以定义为其数据元素为维数组类型的一维序组类型。 数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作。 5.2 数组的顺序表示和实现 由于计算机的内存结构是一维的,因此用一维内存来表

文档评论(0)

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

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

1亿VIP精品文档

相关文档