数据结构第5章-12级.pptVIP

  • 18
  • 0
  • 约6.84千字
  • 约 47页
  • 2016-08-01 发布于湖北
  • 举报
数据结构第5章-12级

②三元组表的转置 ???  方法一:简单地交换a-data中i和j中的内容,得到按列优先顺序存储倒b-data;再将b-data重排成按行优先顺序的三元组表。 ???   1 0 4 0 ②三元组表的转置 ???  方法二:由于A的列是B的行,因此,按a-data的列序转置,所得到的转置矩阵B的三元组表b-data必定是按行优先存放的。 ???  按这种方法设计的算法,其基本思想是:对A中的每一列col(0≤col≤a-n-1),通过从头至尾扫描三元组表a-data,找出所有列号等于col的那些三元组,将它们的行号和列号互换后依次放入b-data中,即可得到B的按行优先的压缩存储表示。 void TransMatrix(TriTupleTable *b,TriTupleTable *a) {//*a,*b是矩阵A、B的三元组表表示,求A转置为B ? int p,q,col;//三元组表中数组元素下标 ? b-m=a-n; b-n=a-m; //A和B的行列总数互换 ? b-t=a-t; //非零元总数 ? if(b-t=0) ????? Error(A=0); //A中无非零元,退出 ? q=0; ? for(col=0;cola-n;col++) //对A的每一列 ??? for(p=0;pa-t;p++) //扫描A的三元组表 ????? if(a-data[p].j==col){ //找列号为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; ??????? q++; ?????? } ?} //TransMatrix ④算法分析   该算法的时间主要耗费在col和p的二重循环上: ???  若A的列数为n,非零元素个数t,则执行时间为O(n×t),即与A的列数和非零元素个数的乘积成正比。   通常用二维数组表示矩阵时,其转置算法的执行时间是O(m×n),它正比于行数和列数的乘积。 ??? 由于非零元素个数一般远远大于行数,因此上述稀疏矩阵转置算法的时间大于通常的转置算法的时间。 十字链表示意图 课堂练习 若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B中,从B[0]开始存放,那么在B中确定aij(0≤ij,)的位置k的关系为(       )。 A. i*(i-1)/2+j   B. j*(j-1)/2+i   C. i*(i+1)/2+j    D. j*(j+1)/2+i 课堂练习 一个5阶对称矩阵,存储在向量s[M]中,其中M的最小值应该为 。 设有一个5阶对称矩阵a采用压缩存储方式(以行为主序存储)若a11下标为1,则a43 的下标为 。 15 9 5.3 广义表的概念 线性表的表示方法:LS=(a1,a2,…,an) 如:L1=(a,b,c,d) L2=(1,2,3,4,…,8,9,10) 若其中某一个元素不再是单个原子, 如:L3=(1,2, L1 ,4,…,8,9,10) 即:L3=(1,2, (a,b,c,d),4,…,8,9,10) 5.3 广义表的概念 定义:线性表的推广,也称列表 表示方法:LS=(a1,a2,…,an), 其中:ai可以是单个元素-原子,也可以是广义表-子表,当表非空时, a1-表头,(a2,…,an)称为表尾,n 为长度。 长度:广义表中包含的元素的个数 深度:广义表中括号的层数 5.3 广义表的概念 举例: (1)A=( ) (2)B=(e) (3)C=(a,(b,c,d)) (4)D=(A,B,C)=(( ),(e),(a,(b,c,d))) (5)E=(a,E)=(a,(a,(a,…))) 几个相关概念间的关系: 递归表 再入表 纯表 线性表 广义表的两个基本运算:取表头和取表尾 取表头是非空表的第一个元素 取表尾是其余元素组成的表(一定是广义表) Ls=((x,(a,b)),y) 长度?深度? head(Ls)= Tail(Ls)= 5.3 广义表的概念 (x,(a,b)) (y) 广义表的存储 单链表示法 工资收入 扣除 实发工资 岗位工资 薪级工资 校内津贴 医保 公积金 双链表示法 广义表的存储 headC=(A,B)=((x,L),(A,y))=((x,(a,b)),((x,L),y)) =((x,(a,b)),((x,(a,b)),y)) * * * 第五章

文档评论(0)

1亿VIP精品文档

相关文档