数据结构课程设计之稀疏矩阵运算器

2019-01-07 15:16

#include

#include #define maxsize 200 typedef struct{

int i,j;//i为非零元素在行,j为非零元所在列 int e;//非零元 }Tripe;

typedef struct{

Tripe data[maxsize];

int h,l,total;//稀疏矩阵的行数列数及非零元个数 }TSMatrix;

void Creat(TSMatrix &M){//创建一个稀疏矩阵 int a,b,c,x;

scanf(\

for(x=1;x<=M.total;x++) {

printf(\请输入第%d个稀疏矩阵的非零元素所在的行数列数用逗号隔开输完按回车键:\\n\

scanf(\ M.data[x].i=a; M.data[x].j=b;

M.data[x].e=c; } }

void Print(TSMatrix &S){//输出稀疏矩阵 int x;

int c,b,a[maxsize][maxsize]; for(c=1;c<=S.h;c++) for(b=1;b<=S.l;b++)

a[c][b]=0;//全部初始化为零

for(x=1;x<=S.total;x++) {

a[S.data[x].i][S.data[x].j]+=S.data[x].e;//在矩阵的相应位置附上非零元素 }

for(c=1;c<=S.h;c++) for(b=1;b<=S.l;b++) {

printf(\ if(b==S.l)printf(\ }

}

void Add(TSMatrix T,TSMatrix V,TSMatrix &M){//加法运算 int p=1,q=1; int b=1;

if(T.h!=V.h||T.l!=V.l)

{

printf(\两矩阵行数或列数不同无法进行相加:\\n\ exit(0); }

while(p<=T.total&&q<=V.total) {

if(T.data[p].i==V.data[q].i) {

if(T.data[p].j==V.data[q].j) {

M.data[b].i=T.data[p].i;

M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e+V.data[q].e; p++;b++;q++; }

else if(T.data[p].j

M.data[b].i=T.data[p].i; M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e; b++;p++; }

else if(T.data[p].j>V.data[q].j) {

M.data[b].i=V.data[q].i; M.data[b].j=V.data[q].j; M.data[b].e=V.data[q].e; b++;q++; }

}

else if(T.data[p].i

M.data[b].i=T.data[p].i; M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e; b++;p++;

}

else if(T.data[p].i>V.data[q].i) {

M.data[b].i=V.data[q].i; M.data[b].j=V.data[q].j; M.data[b].e=V.data[q].e; b++;q++;

}

}

//下面两个循环是把上面循环中未处理的数据添加到M中 while(p<=T.total) {

M.data[b].i=T.data[p].i; M.data[b].j=T.data[p].j; M.data[b].e=T.data[p].e; b++;p++; }

while(q<=V.total) {

M.data[b].i=V.data[q].i; M.data[b].j=V.data[q].j; M.data[b].e=V.data[q].e; b++;q++;

}

M.h=T.h; M.l=T.l;

M.total=b-1; //b最后要减一,因为上面处理最后一个数时b也增加1了

}

void TransposTSMtrix(TSMatrix A,TSMatrix &B) //完成矩阵的转置,一次快速定位法 {

int j,t,p,q;

int num[maxsize],position[maxsize];//num矩阵某列非零元个数,position B.h=A.l; B.l=A.h; B.total=A.total; if(B.total) {

for(j=1;j<=A.l;j++) num[j]=0;

for(t=1;t<=A.total;t++) num[A.data[t].j]++; position[1]=1;

for(j=2;j<=A.l;j++)

position[j]=position[j-1]+num[j-1]; for(p=1;p<=A.total;p++) { j=A.data[p].j; q=position[j];

B.data[q].i=A.data[p].j; B.data[q].j=A.data[p].i; B.data[q].e=A.data[p].e;

position[j]++;

} } }

void Jiansmatrix(TSMatrix M,TSMatrix N,TSMatrix &T){ int m=1,n=1,t=1;

if(M.h!=N.h||M.l!=N.l) {printf(\两矩阵行数或列数不同无法进行相减\ T.h=M.h;T.l=M.l;

while(m<=M.total&&n<=N.total){ {

if(M.data[m].i==N.data[n].i)

{

if(M.data[m].j==N.data[n].j)

{ if(M.data[m].e==N.data[n].e) { T.data[t].i=M.data[m].i; T.data[t].j=M.data[m].j;

m++;n++; }

else {

T.data[t].e=M.data[m].e-N.data[n].e; T.data[t].i=M.data[m].i;

T.data[t].j=M.data[m].j; t++;m++;n++;

} }

else if(M.data[m].j

T.data[t].e=M.data[m].e; T.data[t].i=M.data[m].i;

T.data[t].j=M.data[m].j; t++;m++;

}

else if(M.data[m].j>N.data[n].j) {

T.data[t].e=0-N.data[n].e; T.data[t].j=N.data[n].j; t++;n++;

T.data[t].i=N.data[n].i;

}

}

else{

if(M.data[m].i

T.data[t].j=M.data[m].j; T.data[t].e=M.data[m].e; t++;m++; }

else { T.data[t].e=0-N.data[n].e;

T.data[t].i=N.data[n].i; T.data[t].j=N.data[n].j;

t++;n++; }

} } }

while(M.total==(m-1)&&n<=N.total) { T.data[t].i=N.data[n].i; T.data[t].j=N.data[n].j;

T.data[t].e=N.data[n].e; t++;n++;

}

while(N.total==(n-1)&&m<=M.total) {

T.data[t].i=M.data[m].i; T.data[t].j=M.data[m].j; T.data[t].e=M.data[m].e; t++;m++;

} T.total=t-1; }

void Multsmatrix(TSMatrix M,TSMatrix N,TSMatrix &T) {

int p,q,Qn=0; int a[200][200];

if(M.l!=N.h)

{printf(\两矩阵无法相乘\T.h=M.h;T.l=N.l;


数据结构课程设计之稀疏矩阵运算器.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:四议两公开制度

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: