logo资料库

稀疏矩阵的运算实验报告.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
实现稀疏矩阵(采用三元组表示)的基本运算实验报告 一 实验题目: 实现稀疏矩阵(采用三元组表示)的基本运算 二 实验要求: (1)生成如下两个稀疏矩阵的三元组 a 和 b; (上机实验指导 P92 ) (2)输出 a 转置矩阵的三元组 ; (3)输出 a + b 的三元组; (4)输出 a * b 的三元组; 三 实验内容: 3.1 稀疏矩阵的抽象数据类型: ADT SparseMatrix { 数据对象:D={aij| i = 1,2,3,….,m; j =1,2,3,……,n; ai,j∈ElemSet,m 和 n 分别称为矩阵的行数和列数 } 数据关系 : R={ Row , Col } Row ={ | 1≤ i≤m , 1≤ j≤ n-1} Col ={| 1≤i≤m-1,1≤j≤n} 基本操作: CreateSMatrix(&M) 操作结果:创建稀疏矩阵 M PrintSMatrix(M) 初始条件:稀疏矩阵 M 已经存在 操作结果:打印矩阵 M DestroySMatrix(&M) 初始条件:稀疏矩阵 M 已经存在 操作结果:销毁矩阵 M CopySMatrix(M, &T) 初始条件:稀疏矩阵 M 已经存在 操作结果:复制矩阵 M 到 T AddSMatrix(M, N, &Q) 初始条件:稀疏矩阵 M、N 已经存在 操作结果:求矩阵的和 Q=M+N SubSMatrix(M, N, &Q)
初始条件:稀疏矩阵 M、N 已经存在 操作结果:求矩阵的差 Q=M-N TransposeSMatrix(M, & T) 初始条件:稀疏矩阵 M 已经存在 操作结果:求矩阵 M 的转置 T MultSMatrix(M, N, &Q) 初始条件:稀疏矩阵 M 已经存在 操作结果:求矩阵的积 Q=M*N }ADT SparseMatrix 3.2 存储结构的定义 #define N 4 typedef int ElemType; #define MaxSize 100 //矩阵中非零元素最多个数 typedef struct { int r; int c; ElemType d; } TupNode; typedef struct { int rows; int cols; int nums; //行号 //列号 //元素值 //三元组定义 //行数值 //列数值 //非零元素个数 TupNode data[MaxSize]; } TSMatrix; 3.3 基本操作实现: //三元组顺序表定义 void CreatMat(TSMatrix &t,ElemType A[N][N]) { int i,j; t.rows=N;t.cols=N;t.nums=0; for (i=0;i
} } void DispMat(TSMatrix t) { } int i; if (t.nums<=0) return; printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums); printf("\t------------------\n"); for (i=0;i
3.5 解题过程: 实验源代码如下: 3.5.1 顺序表的各种运算 #include #define N 4 typedef int ElemType; #define MaxSize 100 //矩阵中非零元素最多个数 typedef struct { int r; int c; ElemType d; } TupNode; typedef struct { int rows; int cols; int nums; //行号 //列号 //元素值 //三元组定义 //行数值 //列数值 //非零元素个数 TupNode data[MaxSize]; } TSMatrix; //三元组顺序表定义 void CreatMat(TSMatrix &t,ElemType A[N][N]){ int i,j; t.rows=N;t.cols=N;t.nums=0; for (i=0;i
for (i=0;i
c.data[k].c=a.data[i].c; c.data[k].d=a.data[i].d; k++;i++; } else if (a.data[i].c>b.data[j].c)//a 元素的列号大于 b 元素的列号 { } c.data[k].r=b.data[j].r; //将 b 元素添加到 c 中 c.data[k].c=b.data[j].c; c.data[k].d=b.data[j].d; k++;j++; else //a 元素的列号等于 b 元素的列号 { v=a.data[i].d+b.data[j].d; if (v!=0) //只将不为 0 的结果添加到 c 中 { } c.data[k].r=a.data[i].r; c.data[k].c=a.data[i].c; c.data[k].d=v; k++; i++;j++; } } else if (a.data[i].r
c.data[k].c=b.data[j].c; c.data[k].d=b.data[j].d; k++;j++; } c.nums=k; } return true; } int getvalue(TSMatrix c,int i,int j) { } int k=0; while (k
} } c.rows=a.rows; c.cols=b.cols; c.nums=p; return true; } int main() { ElemType a1[N][N]={ {1,0,3,0}, {0,1,0,0}, {0,0,1,0}, {0,0,1,1}}; ElemType b1[N][N]={ {3,0,0,0}, {0,4,0,0}, {0,0,1,0}, {0,0,0,2}}; TSMatrix a,b,c; CreatMat(a,a1); CreatMat(b,b1); printf("a 的三元组:\n");DispMat(a); printf("b 的三元组:\n");DispMat(b); printf("a 转置为 c\n"); TranMat(a,c); printf("c 的三元组:\n");DispMat(c); printf("c=a+b\n"); MatAdd(a,b,c); printf("c 的三元组:\n");DispMat(c); printf("c=a×b\n"); MatMul(a,b,c); printf("c 的三元组:\n");DispMat(c); return 0; }
收藏