资源描述:
《数据结构(邹永林版)实验报告5--特殊矩阵和稀疏矩阵.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验五 特殊矩阵和稀疏矩阵 【实验目的】 1、掌握数组的结构类型(静态的内存空间配置);通过数组的引用下标转换成该数据在内存中的地址; 2、掌握对称矩阵的压缩存储表示; 3、掌握稀疏矩阵的压缩存储-三元组表表示,以及稀疏矩阵的转置算法。 【实验学时】 2学时 【实验预习】 回答以下问题: 1、什么是对称矩阵?写出对称矩阵压缩存储sa[k]与aij之间的对应关系。 若n阶矩阵A中的元素满足下述性质:aij=aji,则称为n阶对称矩阵。 sa[k]与矩阵元素aij之间存在着一一对应的关系:
2、 若i>=j,k=i*(i+1)/2+j; 若i3、k与ij的关系。(注意C程序中,i,j,k均从0开始) (2)调试程序与运行。对称矩阵存储下三角部分即i>=j。 对称矩阵 3,9,1,4,7 9,5,2,5,8 1,2,5,2,4 4,5,2,1,7 7,8,4,7,9参考程序如下: #include #define N 5 int main() { int upper[N][N]= {{3,9,1,4,7
4、}, {9,5,2,5,8}, {1,2,5,2,4}, {4,5,2,1,7}, {7,8,4,7,9} }; /*对称矩阵*/ int rowMajor[15]; /*存储转换数据后以行为主的数组*/ int Index; /*数组的索引值*/ int i,j; printf("T
5、wo dimensional upper triangular array:"); for (i=0; i6、 if(i>=j) /*下三角元素进行存储*/ { Index=i*(i+1)/2+j; /*ij与index的转换*/ rowMajor[Index]=upper[i][j]; } printf("Row Major one dimensional array:"); for(i=0; i<15; i++) /*输出转换后的一维数组*/ printf("%3d", rowMajor[i])
7、; printf(""); return 1; } 2、完成程序exp5_2.c,实现稀疏矩阵的三元组表存储及稀疏矩阵的转置。调试并给出结果: 补充完整程序,运行稀疏矩阵的一般转置算法; 完成稀疏矩阵的快速转置算法,并修改主函数的转置调用算法,验证快速转置算法的正确性。exp5_2.c部分代码如下: #include #define MAXSIZE 20 /*非零元素个数最大值*/ typedef int ElemType; typedef st
8、ruct { int i,j; ElemType e; }Triple; typedef struct { Triple data[MAXSIZE+1]; /*三元组表,data[0]不用*/ int mu,nu,tu; /*矩阵的行数、列数、非零元个数*/ }TSMatrix; void TransposeSMatrix(TSMatrix *T,TSMatrix *M); /*一般转置算法*/ void FastTransposeSMatrix