实现稀疏矩阵采用三元组表示的基本运算实验报告.docx

上传人:b****7 文档编号:26216776 上传时间:2023-06-17 格式:DOCX 页数:8 大小:47.31KB
下载 相关 举报
实现稀疏矩阵采用三元组表示的基本运算实验报告.docx_第1页
第1页 / 共8页
实现稀疏矩阵采用三元组表示的基本运算实验报告.docx_第2页
第2页 / 共8页
实现稀疏矩阵采用三元组表示的基本运算实验报告.docx_第3页
第3页 / 共8页
实现稀疏矩阵采用三元组表示的基本运算实验报告.docx_第4页
第4页 / 共8页
实现稀疏矩阵采用三元组表示的基本运算实验报告.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实现稀疏矩阵采用三元组表示的基本运算实验报告.docx

《实现稀疏矩阵采用三元组表示的基本运算实验报告.docx》由会员分享,可在线阅读,更多相关《实现稀疏矩阵采用三元组表示的基本运算实验报告.docx(8页珍藏版)》请在冰豆网上搜索。

实现稀疏矩阵采用三元组表示的基本运算实验报告.docx

实现稀疏矩阵采用三元组表示的基本运算实验报告

实现稀疏矩阵(采用三元组表示)的基本运算实验报告

一实验题目:

实现稀疏矩阵(采用三元组表示)的基本运算

二实验要求:

(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 ={ |  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

}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;

}

 

四实验结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1