设稀疏矩阵采用三元组顺序表存储结构,编写函数实现稀疏矩阵的转置运算B=AT(这里注意是A的T次方),已知稀疏矩阵A中的非
来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/15 03:35:13
设稀疏矩阵采用三元组顺序表存储结构,编写函数实现稀疏矩阵的转置运算B=AT(这里注意是A的T次方),已知稀疏矩阵A中的非零元三元组的排列次序是先按行下标排列,在行下标相同时按列下标排列,要求稀疏矩阵B中的非零元三元组的排列次序也是先按行下标排列,在行下标相同时按列下标排列.
运行后要什么输入才能得到最后结果啊?
运行后要什么输入才能得到最后结果啊?
#include
#include
#include
#define OK 1
#define ERROR 0
#define MAXSIZE 12500
typedef int Status;
typedef int ElemType;
typedef struct
{
int i,j;
ElemType e;
}Triple;
typedef struct
{
Triple date[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
Status CreatSMatrix( TSMatrix *M)
//建立三元组
{
int row,col,date,k;
printf("请输入行数列数和非零元个数\n");
scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);
while( M->mu nu tu > ( M->mu * M->nu ) || M->tu > MAXSIZE)
{
printf("输入不正确,请重新输入\n");
fflush(stdin);
scanf("%d,%d,%d",&M->mu,&M->nu,&M->tu);
}
(*M).date[0].i = 0;
for( k = 1; k date[k].i = row;
M->date[k].j = col;
M->date[k].e = date;
}
printf("输入非空元素组成的三元组完毕!\n");
return OK;
}
Status comp( int a, int b)
//比较两个数字的大小AddSmatrix函数使用
{
int i;
if( a < b)
i = 1;
if( a == b)
i = 0;
if( a > b)
i = -1;
return i;
}
Status AddSMatrix( TSMatrix &A, TSMatrix &B, TSMatrix *C)
//矩阵的相加
{
Triple *Ap,*Bp,*Ae,*Be,*Ch,*Ce;
if( A.mu != B.mu || A.nu != B.nu)
{
printf("\nA and B is not compared\n");
return ERROR;
}
// if( (*C).date )
// free( (*C).date );
C->mu = A.mu;
C->nu = A.nu;
Ap = &A.date[1];
Bp = &B.date[1];
Ae = &A.date[A.tu];
Be = &B.date[B.tu];
Ch = Ce = C->date;
while( Ap i ) )
{
case 1:
{
*Ce = *Ap;
Ap++;
}break;
case -1:
{
*Ce = *Bp;
Bp++;
}break;
case 0:
{
switch( comp(Ap->j,Bp->j) )
{
case 0:
{
*Ce = *Ap;
Ce->e += Bp->e;
if( !Ce->e )
Ce--;
Ap++;
Bp++;
}break;
case 1:
{
*Ce = *Ap;
Ap++;
}break;
case -1:
{
*Ce = *Bp;
Bp++;
}
}
}break;
}
}
if( Ap > Ae)
while( Bp Be)
while( Ap tu = Ce - Ch;
return OK;
}
Status Transpose( TSMatrix M, TSMatrix &T)
//采用三元组表存储表示,求稀疏矩阵M的转置矩阵T
{
int k;
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
if( T.tu )
{
for( k = 1; k
#include
#include
#define OK 1
#define ERROR 0
#define MAXSIZE 12500
typedef int Status;
typedef int ElemType;
typedef struct
{
int i,j;
ElemType e;
}Triple;
typedef struct
{
Triple date[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
Status CreatSMatrix( TSMatrix *M)
//建立三元组
{
int row,col,date,k;
printf("请输入行数列数和非零元个数\n");
scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);
while( M->mu nu tu > ( M->mu * M->nu ) || M->tu > MAXSIZE)
{
printf("输入不正确,请重新输入\n");
fflush(stdin);
scanf("%d,%d,%d",&M->mu,&M->nu,&M->tu);
}
(*M).date[0].i = 0;
for( k = 1; k date[k].i = row;
M->date[k].j = col;
M->date[k].e = date;
}
printf("输入非空元素组成的三元组完毕!\n");
return OK;
}
Status comp( int a, int b)
//比较两个数字的大小AddSmatrix函数使用
{
int i;
if( a < b)
i = 1;
if( a == b)
i = 0;
if( a > b)
i = -1;
return i;
}
Status AddSMatrix( TSMatrix &A, TSMatrix &B, TSMatrix *C)
//矩阵的相加
{
Triple *Ap,*Bp,*Ae,*Be,*Ch,*Ce;
if( A.mu != B.mu || A.nu != B.nu)
{
printf("\nA and B is not compared\n");
return ERROR;
}
// if( (*C).date )
// free( (*C).date );
C->mu = A.mu;
C->nu = A.nu;
Ap = &A.date[1];
Bp = &B.date[1];
Ae = &A.date[A.tu];
Be = &B.date[B.tu];
Ch = Ce = C->date;
while( Ap i ) )
{
case 1:
{
*Ce = *Ap;
Ap++;
}break;
case -1:
{
*Ce = *Bp;
Bp++;
}break;
case 0:
{
switch( comp(Ap->j,Bp->j) )
{
case 0:
{
*Ce = *Ap;
Ce->e += Bp->e;
if( !Ce->e )
Ce--;
Ap++;
Bp++;
}break;
case 1:
{
*Ce = *Ap;
Ap++;
}break;
case -1:
{
*Ce = *Bp;
Bp++;
}
}
}break;
}
}
if( Ap > Ae)
while( Bp Be)
while( Ap tu = Ce - Ch;
return OK;
}
Status Transpose( TSMatrix M, TSMatrix &T)
//采用三元组表存储表示,求稀疏矩阵M的转置矩阵T
{
int k;
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
if( T.tu )
{
for( k = 1; k
稀疏矩阵三元组存储结构的定义及其有关算法的实现?
已知A为稀疏矩阵,是从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成求a【ii】之
写出下列稀疏矩阵的三元组表
数据结构三元组顺序表稀疏矩阵相加
关于数据结构中 稀疏矩阵的问题!
数据结构课程设计 稀疏矩阵实现与应用
线性结构问题一下机构那个是线性结构a广义表b二叉树c稀疏矩阵d串ps:解释下什么是线性结构
matlab生成稀疏矩阵.急
数据结构实验稀疏矩阵,谁知道?
matlab 稀疏矩阵 三维图形
矩阵加法 C语言问题Description若将稀疏矩阵中的非零元素以行序为主序的顺序存于一个一维数组中,并用一个二维数组
C语言考试 矩阵转换矩阵转换:大部分元素是0的矩阵称为稀疏矩阵,假设有K个非0元素,则可以用K*3的矩阵简记之,其中第一