实现稀疏矩阵采用三元组表示的基本运算实验报告.docx
- 文档编号:26216776
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:8
- 大小:47.31KB
实现稀疏矩阵采用三元组表示的基本运算实验报告.docx
《实现稀疏矩阵采用三元组表示的基本运算实验报告.docx》由会员分享,可在线阅读,更多相关《实现稀疏矩阵采用三元组表示的基本运算实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
实现稀疏矩阵采用三元组表示的基本运算实验报告
实现稀疏矩阵(采用三元组表示)的基本运算实验报告
一实验题目:
实现稀疏矩阵(采用三元组表示)的基本运算
二实验要求:
(1)生成如下两个稀疏矩阵的三元组a和b;(上机实验指导P92)
(2)输出a转置矩阵的三元组;
(3)输出a+b的三元组;
(4)输出a*b的三元组;
三实验内容:
稀疏矩阵的抽象数据类型:
ADT SparseMatrix {
数据对象:
D={aij| i = 1,2,3,….,m; j =1,2,3,……,n;
ai,j∈ElemSet,m和n分别称为矩阵的行数和列数 }
数据关系 :
R={ Row , Col }
Row ={
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
}ADTSparseMatrix
存储结构的定义
#defineN4
typedefintElemType;
#defineMaxSize100=i;[].c=j;
[].d=A[i][j];++;
}
}
}
voidDispMat(TSMatrixt)
{
inti;
if<=0)
return;
printf("\t%d\t%d\t%d\n",,,;
printf("\t------------------\n");
for(i=0;i<;i++)
printf("\t%d\t%d\t%d\n",[i].r,[i].c,[i].d);
}
解题思路:
1.转置矩阵:
只要判定原矩阵有值,那么只要遍历一遍原矩阵,把原来矩阵中非0元素行列变换一下赋值到新的矩阵中即可。
2.矩阵加法:
用各种if判断,区分出矩阵进行加法时的可能情况,分情况处理即可。
3.矩阵乘法:
通过getvalue(c,i,j)函数查找矩阵c中i行j列,所储存的元素的值。
然后便是模拟矩阵乘法的过程进行求解。
解题过程:
实验源代码如下:
顺序表的各种运算
#include<>
#defineN4
typedefintElemType;
#defineMaxSize100=i;[].c=j;
[].d=A[i][j];++;
}
}
}
voidDispMat(TSMatrixt){
inti;
if<=0)
return;
printf("\t%d\t%d\t%d\n",,,;
printf("\t------------------\n");
for(i=0;i<;i++)
printf("\t%d\t%d\t%d\n",[i].r,[i].c,[i].d);
}
voidTranMat(TSMatrixt,TSMatrix&tb){
intp,q=0,v;==v)
{
[q].r=[p].c;
[q].c=[p].r;
[q].d=[p].d;
q++;
}
}
}
boolMatAdd(TSMatrixa,TSMatrixb,TSMatrix&c){
inti=0,j=0,k=0;
ElemTypev;
if!
=||!
=
returnfalse;==[j].r)<[j].c)=[i].r;=[i].c;
[k].d=[i].d;
k++;i++;
}
elseif[i].c>[j].c)=[j].r;=[j].c;
[k].d=[j].d;
k++;j++;
}
else+[j].d;
if(v!
=0)=[i].r;
[k].c=[i].c;
[k].d=v;
k++;
}
i++;j++;
}
}
elseif[i].r<[j].r)=[i].r;=[i].c;
[k].d=[i].d;
k++;i++;
}
else=[j].r;=[j].c;
[k].d=[j].d;
k++;j++;
}
=k;
}
returntrue;
}
intgetvalue(TSMatrixc,inti,intj)
{
intk=0;
while(k<&&[k].r!
=i||[k].c!
=j))
k++;
if(k<
return[k].d);
else
return(0);
}
boolMatMul(TSMatrixa,TSMatrixb,TSMatrix&c)
{
inti,j,k,p=0;
ElemTypes;
if!
==i;
[p].c=j;
[p].d=s;
p++;
}
}
=;
=;
=p;
returntrue;
}
intmain()
{
ElemTypea1[N][N]={{1,0,3,0},
{0,1,0,0},
{0,0,1,0},
{0,0,1,1}};
ElemTypeb1[N][N]={{3,0,0,0},
{0,4,0,0},
{0,0,1,0},
{0,0,0,2}};
TSMatrixa,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);
return0;
}
四实验结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 稀疏 矩阵 采用 三元 表示 基本 运算 实验 报告