用三元组表存储表示求稀疏矩阵M转置函数T.docx
- 文档编号:28307118
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:9
- 大小:123.34KB
用三元组表存储表示求稀疏矩阵M转置函数T.docx
《用三元组表存储表示求稀疏矩阵M转置函数T.docx》由会员分享,可在线阅读,更多相关《用三元组表存储表示求稀疏矩阵M转置函数T.docx(9页珍藏版)》请在冰豆网上搜索。
用三元组表存储表示求稀疏矩阵M转置函数T
用三元组表存储表示求稀疏矩阵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分别代表矩阵的行数,列数和非零元个数。 创建稀疏矩阵M。 2. 创建一个稀疏矩阵,用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语句,结果就可以输出链表状的非零元素。 建立main函数。 6. Main函数直接调用各个函数,在M的后面打印出其普通排列,T后面也打印出 其普通排列。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三元 存储 表示 稀疏 矩阵 函数
