用三元组表存储表示求稀疏矩阵M转置函数T.docx

上传人:b****8 文档编号:12729928 上传时间:2023-06-07 格式:DOCX 页数:10 大小:76.49KB
下载 相关 举报
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第1页
第1页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第2页
第2页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第3页
第3页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第4页
第4页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第5页
第5页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第6页
第6页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第7页
第7页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第8页
第8页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第9页
第9页 / 共10页
用三元组表存储表示求稀疏矩阵M转置函数T.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用三元组表存储表示求稀疏矩阵M转置函数T.docx

《用三元组表存储表示求稀疏矩阵M转置函数T.docx》由会员分享,可在线阅读,更多相关《用三元组表存储表示求稀疏矩阵M转置函数T.docx(10页珍藏版)》请在冰点文库上搜索。

用三元组表存储表示求稀疏矩阵M转置函数T.docx

用三元组表存储表示求稀疏矩阵M转置函数T

实验目的

采用三元组表存储表示,求稀疏矩阵M转置函数T

实验内容

编程序并上机调试运行。

采用三元组表存储表示,求稀疏矩阵M转置函数T

编写程序

//采用三元组表存储表示,求稀疏矩阵M转置函数T

#include

#defineMAXSIZE100

typedefstruct

{

inti,j;

inte;

}Triple;

typedefstruct

{

Tripledata[MAXSIZE+1];

intmu,nu,tu;

}TSMatrix;

 

//创建稀疏矩阵M

CreateSMatrix(TSMatrix*M)

{

inti,m,n,e,k;

printf("输入矩阵M的行数、列数、非零元的个数(中间用逗号隔开):

");

scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);

(*M).data[0].i=0;

printf("\n");

for(i=1;i<=(*M).tu;i++)

{

do

{

printf("输入第%d个非零元素所在的行(1~%d)列(1~%d)值以及该数值:

",i,(*M).mu,(*M).nu);

scanf("%d,%d,%d",&m,&n,&e);

k=0;

if(m<1||m>(*M).mu||n<1||n>(*M).nu)

k=1;

if(m<(*M).data[i-1].i||m==(*M).data[i-1].i&&n<(*M).data[i-1].j)

k=1;

}while(k);

(*M).data[i].i=m;

(*M).data[i].j=n;

(*M).data[i].e=e;

}

printf("\n");

return1;

}

 

//输出稀疏矩阵M

voidPrintSMatrix(TSMatrixM)

{

inti;

printf("**************************************\n");

for(i=1;i<=M.tu;i++)

printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[i].e);

printf("**************************************\n");

printf("\n");

}

 

//求稀疏矩阵M的转置矩阵T

voidTransposeSMatrix(TSMatrixM,TSMatrix*T)

{

intp,q,col;

(*T).mu=M.nu;

(*T).nu=M.mu;

(*T).tu=M.tu;

if((*T).tu)

{

q=1;

for(col=1;col<=M.nu;++col)

for(p=1;p<=M.tu;++p)

if(M.data[p].j==col)

{(*T).data[q].i=M.data[p].j;

(*T).data[q].j=M.data[p].i;

(*T).data[q].e=M.data[p].e;

++q;

}

}

return1;

}

 

//打印矩阵函数,以通常形式输出矩阵

voidprint(TSMatrixA)

{

intk=1,a,b;

intM[MAXSIZE][MAXSIZE];

printf("非零元素所对应的位置:

\n");

printf("**************************************\n");

for(a=0;a

{

for(b=0;b

M[a][b]=0;

}

while(k<=A.tu)

{

M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e;

k++;

}

for(a=0;a

{

printf("|");

for(b=0;b

printf("%d",M[a][b]);

printf("|\n");

}

printf("**************************************\n");

printf("\n");

}

//主函数

intmain()

{

TSMatrixM,T;

printf("创建矩阵M:

");

CreateSMatrix(&M);

printf("矩阵M的三元组表为:

\n");

PrintSMatrix(M);

print(M);

TransposeSMatrix(M,&T);

printf("稀疏矩阵M的转换矩阵T的三元组表为:

\n");

PrintSMatrix(T);

print(T);

printf("\n\n");

getchar();

return0;

}

运行程序:

 

程序解析:

1.首先是将程序的开头写好,定义非零元个数最多为100.

定义非零元的行下标,列下标,和非零元素为int型。

由mu,nu,tu分别代表矩阵的行数,列数和非零元个数。

 

2.创建稀疏矩阵M。

创建一个稀疏矩阵,用scanf进行用户输入行数,列数及非零元个数。

当i小于等于非零元个数时,进行以下的for循环,执行内循环的循环语句。

当k不为0时,重复执行输入非零元素的行列值以及其值,若超出行数或列数或非零元个数,则跳出循环。

加入外循环,执行外循环的三个语句,直到,i等于非零个数,跳出外循环。

 

3.输出稀疏矩阵M

用PrintSMatrix函数输出稀疏矩阵,从i等于1循环执行到i等于非零元个数,使非零元的行列数一个一个输出。

 

4.求稀疏矩阵的转置矩阵。

用TransposeSMatrix函数实现稀疏矩阵M转置为矩阵T。

让T的行等于M的列,T的列等于M的行。

非零元素相等。

当非零元素不等于零时,就执行if语句,if语句中两个for循环和一个if循环实现了MT矩阵行列的对调,按列序求转置。

最后返回1.

5.打印函数,输出非零元素对应的位置

这里定义一个M的数组,当a小于行数数,执行内循环,使b的列数不断增加,赋值为0,在执行外循环,b变为1,执行内循环,在赋值为0,然后再跳出内循环,执行外循环,如此直到,a等于行数则跳出外循环。

执行下面的while语句。

当k<=A的非零元个数时,将非零元素放置到指定的位置。

然后跳出循环执行下面的for语句,结果就可以输出链表状的非零元素。

6.建立main函数。

Main函数直接调用各个函数,在M的后面打印出其普通排列,T后面也打印出其普通排列。

 

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2