- 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)