稀疏矩阵和三元组的问题假设n x n的稀疏矩阵A采用三元组表示,编写一个程序如下功能:(1)生成如下两个稀疏矩阵的三元组a和b;1 0 3 0 3 0 0 00 1 0 0 0 4 0 00 0 1 0 0 0 1 00 0 1 1 0 0 0 2(2)输出a转置

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 14:51:59
稀疏矩阵和三元组的问题假设n x n的稀疏矩阵A采用三元组表示,编写一个程序如下功能:(1)生成如下两个稀疏矩阵的三元组a和b;1 0 3 0 3 0 0 00 1 0 0 0 4 0 00 0 1 0 0 0 1 00 0 1 1 0 0 0 2(2)输出a转置

稀疏矩阵和三元组的问题假设n x n的稀疏矩阵A采用三元组表示,编写一个程序如下功能:(1)生成如下两个稀疏矩阵的三元组a和b;1 0 3 0 3 0 0 00 1 0 0 0 4 0 00 0 1 0 0 0 1 00 0 1 1 0 0 0 2(2)输出a转置
稀疏矩阵和三元组的问题
假设n x n的稀疏矩阵A采用三元组表示,编写一个程序如下功能:
(1)生成如下两个稀疏矩阵的三元组a和b;
1 0 3 0 3 0 0 0
0 1 0 0 0 4 0 0
0 0 1 0 0 0 1 0
0 0 1 1 0 0 0 2
(2)输出a转置矩阵的三元组.
(3)输出a+b的三元组.
(4)输出a X b的三元组.

稀疏矩阵和三元组的问题假设n x n的稀疏矩阵A采用三元组表示,编写一个程序如下功能:(1)生成如下两个稀疏矩阵的三元组a和b;1 0 3 0 3 0 0 00 1 0 0 0 4 0 00 0 1 0 0 0 1 00 0 1 1 0 0 0 2(2)输出a转置
#include
#include
#define OK 1
#define ERROR 0
#define MAXSIZE 100 //最多非0元素的个数
#define MAXR 50 //rpos所能处理的最大行数
#define MAXC 50 //系数矩阵相乘时,保留临时列结果的数组temp[MAXC]
typedef struct NODE{ //定义稀疏矩阵结点
int i;
int j;
int data;
} Node;
typedef struct MATRIX{ //定义稀疏矩阵(可以快速访问)
int mu,nu,tu;
Node matrix[MAXSIZE+1];
int rpos[MAXR+1];
} Matrix;
int CreatSMatrix( Matrix* M ); //创建一个矩阵(由用户输入原始矩阵,转化为稀疏矩阵方式储存)
int AddSMatrix( Matrix M,Matrix N,Matrix *Q); //两个稀疏矩阵相加
int Print( Matrix M ); //打印一个稀疏矩阵
int Mul_SMatrix( Matrix M,Matrix N,Matrix *Q); //两个稀疏矩阵相乘
main()
{
Matrix A1,A2,A3; //定义矩阵
CreatSMatrix( &A1 );
CreatSMatrix( &A2 );
if( A1.mu==A2.mu && A1.nu==A2.nu ){ //判断能否相加
AddSMatrix( A1,A2,&A3 );
printf("两矩阵相加得:\n");
Print(A3);
}
else
printf("规模不一致,不能相加!\n");
if( A1.nu==A2.mu ){ //判断能否相乘
Mul_SMatrix( A1,A2,&A3 );
printf("两矩阵相乘得:\n");
Print(A3);
}
system("pause");
return 0;
}
//构建稀疏矩阵
int CreatSMatrix( Matrix* M )
{
int temp,i,j;
printf("输入矩阵的行列数:");
scanf("%d%d",&M->mu,&M->nu);
M->tu=0;
printf("按行序输入矩阵:\n");
for( i=1; imu; i++){
M->rpos[i]=M->tu+1; //每计算完一行,给rpos[]赋值
for( j=1; jnu; j++){
scanf("%d",&temp );
if( temp ){ //非0值保存
M->matrix[M->tu+1].i= i;
M->matrix[M->tu+1].j= j;
M->matrix[M->tu+1].data=temp;
M->tu++;
}
}
}
return OK;
}
//两矩阵相加
int AddSMatrix( Matrix M,Matrix N,Matrix *Q)
{
int arow,Mcol,Ncol,i=1;
int Mlim,Nlim;
Q->tu=0; //给Q赋初值
Q->mu=M.mu;
Q->nu=M.nu;
for( arow=1; arowrpos[arow] = Q->tu+1;
//确定第i行的j在M、N矩阵中的范围
Mlim = arowtu++;
}
else i--; //相加为0,i自减(保持i不变)
Mcol++;
Ncol++;
}
else{ //谁的j小,把谁存入Q
if(M.matrix[Mcol].j < N.matrix[Ncol].j){
Q->matrix[i].i = M.matrix[Mcol].i;
Q->matrix[i].j = M.matrix[Mcol].j;
Q->matrix[i].data = M.matrix[Mcol].data;
Q->tu++;
Mcol++;
}
else{
Q->matrix[i].i = N.matrix[Ncol].i;
Q->matrix[i].j = N.matrix[Ncol].j;
Q->matrix[i].data = N.matrix[Ncol].data;
Q->tu++;
Ncol++;
}
}//else
}//for
if( Mcolmatrix[i].j = M.matrix[Mcol].j;
Q->matrix[i].data = M.matrix[Mcol].data;
Q->tu++;
Mcol++;
}
}
if( Ncolmatrix[i].j = N.matrix[Ncol].j;
Q->matrix[i].data = N.matrix[Ncol].data;
Q->tu++;
Ncol++;
}
}
}//for
return 1;
}
//打印稀疏矩阵
int Print( Matrix M)
{
int i;
if(M.tu==0){
printf("空矩阵\n\n");
return ERROR;
}
printf("i\tj\tdata\n");
for( i=1; itu=0;//初始化Q
Q->mu=M.mu;
Q->nu=M.nu;
if(M.tu*N.tu!=0){ //非零矩阵
for(arow=1; arowtu+1; //给Q->rpos[]数组赋值
Mlim = arowtu].i = arow;
Q->matrix[Q->tu].j = i;
Q->matrix[Q->tu].data = ctemp[i];
}
}
}
}
return 1;
}

稀疏矩阵和三元组的问题假设n x n的稀疏矩阵A采用三元组表示,编写一个程序如下功能:(1)生成如下两个稀疏矩阵的三元组a和b;1 0 3 0 3 0 0 00 1 0 0 0 4 0 00 0 1 0 0 0 1 00 0 1 1 0 0 0 2(2)输出a转置 稀疏矩阵的三元组表示法 写出下列稀疏矩阵的三元组表 稀疏矩阵如何生成相应的三元组顺序表? 数据结构三元组顺序表稀疏矩阵相加三元组顺序表稀疏矩阵A和B,形成新的三元组顺序表稀疏矩阵C,这个解题思路是怎样的?是否新的三元组稀疏矩阵C.MU、C.NU(矩阵的行数和列数)就是取A、B中 稀疏矩阵以三元组表输入,以通常的阵列形式输出,实现稀疏矩阵的转置,实现两个稀疏矩阵的加法运算. 关于数据结构中 稀疏矩阵的问题!已知稀疏矩阵如下,请写出该稀疏矩阵三元组表示和转置的过程. 0 0 1 0 0 0 0 0 2 0 A = 0 3 0 0 0 0 0 0 1 0 2 0 0 0 0转置过程按如下步骤书写:第 稀疏矩阵用模版实现的算法,比如输入矩阵,输出三元组怎么实现? 稀疏矩阵三元组存储结构的定义及其有关算法的实现? 对于下列稀疏矩阵,写出它的三元组表示法 数据结构课程设计 稀疏矩阵实现与应用稀疏矩阵实现与应用要求:实现三元组,十字链表下的稀疏矩阵的下列应用.(1)稀疏矩阵的存储(2)稀疏矩阵加法(3)矩阵乘法(4)矩阵转置给出代 用三元组表实现稀疏矩阵的转置运算二、实验内容1、问题描述:定义一个5行3列的稀疏矩阵{{0,5,0},{6,0,0},{0,9,0},{0,3,7},{8,0,0}};2、 基本要求 :(1) 、采用三元组顺序表存储表示;(2) 、显示上述 用三元组表实现稀疏矩阵的转置运算二、实验内容1、问题描述:定义一个5行3列的稀疏矩阵{{0,5,0},{6,0,0},{0,9,0},{0,3,7},{8,0,0}};2、 基本要求 :(1) 、采用三元组顺序表存储表示;(2) 、显示上述 数据结构问题,有一个100*90的稀疏矩阵,非零元素有10个,设元素为整型,每个整型数占2字节,则用三元组存储该矩阵时,所需的字节数是多少. 设稀疏矩阵采用三元组顺序表存储结构,编写函数实现稀疏矩阵的转置运算B=AT(这里注意是A的T次方),已知稀疏矩阵A中的非零元三元组的排列次序是先按行下标排列,在行下标相同时按列下标 已知A为稀疏矩阵,是从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成求a【ii】之 已知稀疏矩阵A[6][5]如下所示,请分别写出它的三元组表表示与十字链表表示 有关Hermite矩阵和正定矩阵的证明题目假设n阶Hermite矩阵A是可逆的,若对任意n阶正定矩阵B,AB的迹tr(AB)均大于0,证明:A是正定矩阵