//本程序实现稀疏矩阵的创建与相加可在VS2008环境中运行 #include
#include
#define MAXSIZE 100//非零元素个数最大值为
#define OK 1
typedef int ElemType;//元素值的类型定义为int型 typedef int Status;
typedef struct{
int i,j;//该非零元素的行下标和列下标 ElemType e;//存储该非零元素的值
}Triple;
typedef struct{
Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用 int mu,nu,tu;//矩阵的行数、列数和非零元个数 }TSMatrix;
Status CreatSMatrix(TSMatrix &M)
{//创建稀疏矩阵M
}
Status comp(int c1,int c2)
{//比较行列的大小AddSMatrix函数将用到
if(c1MAXSIZE) {printf("非零元素个数太多请重新输入\n");exit(0);} M.data[0].i=0;//为下面比较顺序作准备 for(i=1;iM.mu||nM.nu)//行或列超出范围 {printf("行或列超出范围请重新输入\n");exit(0);} if(m
}
Status AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q) {//求稀疏矩阵的和Q=M+N
}
Status PrintSMatrix(TSMatrix &M)
{//输出稀疏矩阵M int m=1,n=1,q=0;//分别为矩阵M、N、Q的编号 if(M.mu!=N.mu||M.nu!=N.nu)//M、N两稀疏矩阵行或列数不同 {printf("不满足矩阵相加的条件请重新输入\n");exit(0);} Q.mu=M.mu;Q.nu=M.nu;//矩阵Q的行数和列数与矩阵M(矩阵N)相同 while(mMAXSIZE)//非零元素个数太多 {printf("非零元素个数太多请重新输入\n");exit(0);} return OK; switch(comp(M.data[m].i,N.data[n].i)){ } case -1: Q.data[++q]=M.data[m++];//将矩阵M的当前元素值赋给矩阵Q break; switch(comp(M.data[m].j,N.data[n].j)){ } break; Q.data[++q]=N.data[n++]; Q.data[++q]=M.data[m++]; break; Q.data[++q]=M.data[m++]; Q.data[q].e+=N.data[n++].e;//矩阵M、N当前元素求和并赋值给矩阵Q if(Q.data[q].e==0)//元素值为不存入压缩矩阵 q--; break; Q.data[++q]=N.data[n++];//将矩阵N当前元素赋值给矩阵Q case 0://M、N矩阵当前行元素相等继续比较 case -1: case 0://M、N矩阵当前非零元素的行列均相等 case 1: case 1:
}
int main() { } TSMatrix M,N,Q; printf("输入矩阵M\n"); CreatSMatrix(M);//创建矩阵M printf("输入矩阵N\n"); CreatSMatrix(N);//创建矩阵N AddSMatrix(M,N,Q);//M+N printf("输入矩阵M和N的和:\n"); PrintSMatrix(Q);//输出矩阵M+N的和矩阵Q return OK; printf("共%d行%d列%d个非零元素\n",M.mu,M.nu,M.tu); printf("行 列 元素值\n"); for(i=1;i
//本程序实现稀疏矩阵的创建与相加可在VS2008环境中运行 #include
#include
#define MAXSIZE 100//非零元素个数最大值为
#define OK 1
typedef int ElemType;//元素值的类型定义为int型 typedef int Status;
typedef struct{
int i,j;//该非零元素的行下标和列下标 ElemType e;//存储该非零元素的值
}Triple;
typedef struct{
Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用 int mu,nu,tu;//矩阵的行数、列数和非零元个数 }TSMatrix;
Status CreatSMatrix(TSMatrix &M)
{//创建稀疏矩阵M
}
Status comp(int c1,int c2)
{//比较行列的大小AddSMatrix函数将用到
if(c1MAXSIZE) {printf("非零元素个数太多请重新输入\n");exit(0);} M.data[0].i=0;//为下面比较顺序作准备 for(i=1;iM.mu||nM.nu)//行或列超出范围 {printf("行或列超出范围请重新输入\n");exit(0);} if(m
}
Status AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q) {//求稀疏矩阵的和Q=M+N
}
Status PrintSMatrix(TSMatrix &M)
{//输出稀疏矩阵M int m=1,n=1,q=0;//分别为矩阵M、N、Q的编号 if(M.mu!=N.mu||M.nu!=N.nu)//M、N两稀疏矩阵行或列数不同 {printf("不满足矩阵相加的条件请重新输入\n");exit(0);} Q.mu=M.mu;Q.nu=M.nu;//矩阵Q的行数和列数与矩阵M(矩阵N)相同 while(mMAXSIZE)//非零元素个数太多 {printf("非零元素个数太多请重新输入\n");exit(0);} return OK; switch(comp(M.data[m].i,N.data[n].i)){ } case -1: Q.data[++q]=M.data[m++];//将矩阵M的当前元素值赋给矩阵Q break; switch(comp(M.data[m].j,N.data[n].j)){ } break; Q.data[++q]=N.data[n++]; Q.data[++q]=M.data[m++]; break; Q.data[++q]=M.data[m++]; Q.data[q].e+=N.data[n++].e;//矩阵M、N当前元素求和并赋值给矩阵Q if(Q.data[q].e==0)//元素值为不存入压缩矩阵 q--; break; Q.data[++q]=N.data[n++];//将矩阵N当前元素赋值给矩阵Q case 0://M、N矩阵当前行元素相等继续比较 case -1: case 0://M、N矩阵当前非零元素的行列均相等 case 1: case 1:
}
int main() { } TSMatrix M,N,Q; printf("输入矩阵M\n"); CreatSMatrix(M);//创建矩阵M printf("输入矩阵N\n"); CreatSMatrix(N);//创建矩阵N AddSMatrix(M,N,Q);//M+N printf("输入矩阵M和N的和:\n"); PrintSMatrix(Q);//输出矩阵M+N的和矩阵Q return OK; printf("共%d行%d列%d个非零元素\n",M.mu,M.nu,M.tu); printf("行 列 元素值\n"); for(i=1;i