数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx

上传人:b****5 文档编号:7368303 上传时间:2023-05-11 格式:DOCX 页数:13 大小:16.14KB
下载 相关 举报
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第1页
第1页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第2页
第2页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第3页
第3页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第4页
第4页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第5页
第5页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第6页
第6页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第7页
第7页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第8页
第8页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第9页
第9页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第10页
第10页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第11页
第11页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第12页
第12页 / 共13页
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx

《数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx》由会员分享,可在线阅读,更多相关《数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx(13页珍藏版)》请在冰点文库上搜索。

数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx

数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法

×ܽ᣺ÈýÔª×é˳Ðò±íʾ·¨±íʾϡÊè¾ØÕóÓÐÒ»¶¨µÄ¾ÖÏÞÐÔ£¬ÌرðÊÇÔÚ¾ØÕóµÄ³Ë·¨µÄʱºò£¬·Ç³£¸´ÔÓ¡£

Í·Îļþ

#ifndefSYZHEAD_H_INCLUDED

#defineSYZHEAD_H_INCLUDED

#include<stdio.h>

#include<stdlib.h>

typedefintElemType;

typedefstruct

{

introw;

intcol;

ElemTypeelem;

}Triple;

typedefstruct

{

Triple*pdata;

intrnum;

intcnum;

inttnum;

}TSMatrix;

intCreateMatrix(TSMatrix*M);

intDestroyMatrix(TSMatrix*M);

intPrintMatrix(TSMatrix*M);

intPrintTriple(TSMatrix*M);

intCopyMatrix(TSMatrix*Dest,TSMatrixSource);

intTransposeMatrix(TSMatrix*Dest,TSMatrixSource);

intAddMatrix(TSMatrix*Q,TSMatrixM,TSMatrixN);

intSubMatrix(TSMatrix*Q,TSMatrixM,TSMatrixN);

intMultMatrix(TSMatrix*Q,TSMatrixM,TSMatrixN);

#endif//SYZHEAD_H_INCLUDED

º¯ÊýµÄʵÏÖ

#include"syzhead.h"

intCreateMatrix(TSMatrix*M)

{

printf("pleaseinputthernum,cnum,tnumofM\n");

scanf("%d%d%d",&M->rnum,&M->cnum,&M->tnum);

M->pdata=(Triple*)malloc((M->tnum+1)*sizeof(Triple));

if(!

M->pdata)

{

exit

(1);

}

intcount=1;

while(count<=M->tnum)

{

scanf("%d%d%d",&M->pdata[count].row,&M->pdata[count].col,&M->pdata[count].elem);

if(M->pdata[count].row>M->rnum||M->pdata[count].col>M->cnum)

{

printf("IndexERROR!

\n");

exit

(1);

}

count++;

}

return0;

}

intDestroyMatrix(TSMatrix*M)

{

if(!

M->pdata)

{

printf("ERROR!

\n");

exit

(1);

}

free(M->pdata);

M->pdata=NULL;

M->cnum=0;

M->rnum=0;

M->tnum=0;

return0;

}

intPrintMatrix(TSMatrix*M)

{

inti,j;

intcount=1;

for(i=1;i<=M->rnum;i++)

{

for(j=1;j<=M->cnum;j++)

{

if((M->pdata[count].row==i)&&(M->pdata[count].col==j))

{

printf("%d\t",M->pdata[count].elem);

count++;

}

else

{

printf("0\t");

}

}

printf("\n");

}

return0;

}

intPrintTriple(TSMatrix*M)

{

inti;

for(i=1;i<=M->tnum;i++)

{

printf("%d\t%d\t%d\n",M->pdata[i].row,M->pdata[i].col,M->pdata[i].elem);

}

return0;

}

intCopyMatrix(TSMatrix*Dest,TSMatrixSource)

{

Dest->cnum=Sum;

Dest->rnum=Source.rnum;

Dest->tnum=Source.tnum;

Dest->pdata=(Triple*)malloc((Dest->tnum+1)*sizeof(Triple));

inti=1;

while(i<=Dest->tnum)

{

Dest->pdata[i].row=Source.pdata[i].row;

Dest->pdata[i].col=Source.pdata[i].col;

Dest->pdata[i].elem=Source.pdata[i].elem;

i++;

}

return0;

}

intTransposeMatrix(TSMatrix*Dest,TSMatrixSource)

{

Dest->rnum=Sum;

Dest->cnum=Source.rnum;

Dest->tnum=Source.tnum;

Dest->pdata=(Triple*)malloc((Dest->tnum+1)*sizeof(Triple));

inti;

intcol;

intcount=1;

for(col=1;col<=Sum;col++)

{

for(i=1;i<=Source.tnum;i++)

{

if(Source.pdata[i].col==col)

{

Dest->pdata[count].row=Source.pdata[i].col;

Dest->pdata[count].col=Source.pdata[i].row;

Dest->pdata[count].elem=Source.pdata[i].elem;

count++;

}

}

}

return0;

}

intAddMatrix(TSMatrix*Q,TSMatrixM,TSMatrixN)

{

if(M.rnum!

=N.rnum||M.cnum!

=N.cnum)

{

printf("can'tadd!

\n");

exit

(1);

}

Q->cnum=M.cnum;

Q->rnum=M.rnum;

intmemsize=M.tnum+N.tnum+1;

Q->pdata=(Triple*)malloc(memsize*sizeof(Triple));

if(!

Q->pdata)

{

printf("ERROR!

\n");

exit

(1);

}

inti;

intj;

intcount=1;

intcountm=1;

intcountn=1;

inttemp=0;

for(i=1;i<=Q->rnum;i++)

{

for(j=1;j<=Q->cnum;j++)

{

if((M.pdata[countm].row==i)&&(M.pdata[countm].col==j)&&(N.pdata[countn].row==i)&&(N.pdata[countn].col==j))

{

temp=M.pdata[countm].elem+N.pdata[countn].elem;

countm++;

countn++;

}

elseif((M.pdata[countm].row==i)&&(M.pdata[countm].col==j))

{

temp=M.pdata[countm].elem;

countm++;

}

elseif((N.pdata[countn].row==i)&&(N.pdata[countn].col==j))

{

temp=N.pdata[countn].elem;

countn++;

}

if(temp)

{

if(count>memsize)

{

Q->pdata=(Triple*)realloc(Q->pdata,(memsize+1)*sizeof(Triple));

memsize&#£¨²Î¿¼£º£©43;=1;

}

Q->pdata[count].row=i;

Q->pdata[count].col=j;

Q->pdata[count].elem=temp;

count++;

temp=0;

}

}

}

Q->tnum=count-1;

return0;

}

intSubMatrix(TSMatrix*Q,TSMatrixM,TSMatrixN)

{

if(M.rnum!

=N.rnum||M.cnum!

=N.cnum)

{

printf("can'tsub!

\n");

exit

(1);

}

Q->cnum=M.cnum;

Q->rnum=M.rnum;

intmemsize=M.tnum+N.tnum+1;

Q->pdata=(Triple*)malloc(memsize*sizeof(Triple));

if(!

Q->pdata)

{

printf("ERROR!

\n");

exit

(1);

}

inti;

intj;

intcount=1;

intcountm=1;

intcountn=1;

inttemp=0;

for(i=1;i<=Q->rnum;i++)

{

for(j=1;j<=Q->cnum;j++)

{

if((M.pdata[countm].row==i)&&(M.pdata[countm].col==j)&&(N.pdata[countn].row==i)&&(N.pdata[countn].col==j))

{

temp=M.pdata[countm].elem-N.pdata[countn].elem;

countm++;

countn++;

}

elseif((M.pdata[countm].row==i)&&(M.pdata[countm].col==j))

{

temp=M.pdata[countm].elem;

countm++;

}

elseif((N.pdata[countn].row==i)&&(N.pdata[countn].col==j))

{

temp=-1*N.pdata[countn].elem;

countn++;

}

if(temp)

{

if(count>memsize)

{

Q->pdata=(Triple*)realloc(Q->pdata,(memsize+1)*sizeof(Triple));

memsize+=1;

}

Q->pdata[count].row=i;

Q->pdata[count].col=j;

Q->pdata[count].elem=temp;

count++;

temp=0;

}

}

}

Q->tnum=count-1;

return0;

}

intMultMatrix(TSMatrix*Q,TSMatrixM,TSMatrixN)

{

if(M.cnum!

=N.rnum)

{

printf("can'tmult!

\n");

exit

(1);

}

Q->rnum=M.rnum;

Q->cnum=N.cnum;

intmemsize=M.tnum+N.tnum+1;

Q->pdata=(Triple*)malloc(memsize*sizeof(Triple));

if(!

Q->pdata)

{

printf("ERROR!

\n");

exit

(1);

}

inti;

intj;

intk;

intcount=1;

intcountm=1;

intcountn=1;

inttemp=0;

TSMatrixTN;

TransposeMatrix(&TN,N);

for(i=1;i<=M.rnum;i++)

{

for(j=1;j<=TN.rnum;j++)

{

while(M.pdata[countm].row<i)

{

countm++;

}

while(TN.pdata[countn].row<j)

{

countn++;

}

for(k=1;k<=M.cnum;k++)

{

if(M.pdata[countm].col<k&&countm<M.tnum)

{

countm++;

}

if(TN.pdata[countn].col<k&&countn<N.tnum)

{

countn++;

}

if(M.pdata[countm].row==i&&TN.pdata[countn].row==j&&

M.pdata[countm].col==k&&TN.pdata[countn].col==k)

{

temp=temp+M.pdata[countm].elem*TN.pdata[countn].elem;

countm++;

countn++;

}

}

if(temp!

=0)

{

if(count>memsize)

{

Q->pdata=(Triple*)realloc(Q->pdata,(memsize+1)*sizeof(Triple));

memsize+=1;

}

Q->pdata[count].row=i;

Q->pdata[count].col=j;

Q->pdata[count].elem=temp;

temp=0;

count++;

}

countm=1;

}

countn=1;

}

Q->tnum=count-1;

return0;

}

 

Ö÷º¯Êý²âÊÔ

#include"syzhead.h"

intmain()

{

/*TSMatrixM;

CreateMatrix(&M);

PrintTriple(&M);

PrintMatrix(&M);

printf("\n\n");

TSMatrixT;

CopyMatrix(&T,M);

PrintTriple(&T);

PrintMatrix(&T);

printf("\n\n");

printf("ADD\n");

TSMatrixQ;

AddMatrix(&Q,M,T);

PrintTriple(&Q);

PrintMatrix(&Q);

printf("SUB\n");

SubMatrix(&Q,M,T);

PrintTriple(&Q);

PrintMatrix(&Q);

TransposeMatrix(&T,M);

PrintTriple(&T);

PrintMatrix(&T);*/

TSMatrixM;

TSMatrixN;

TSMatrixRes;

CreateMatrix(&M);

CreateMatrix(&N);

printf("ADD\n");

AddMatrix(&Res,M,N);

PrintMatrix(&Res);

printf("SUB\n");

SubMatrix(&Res,M,N);

PrintMatrix(&Res);

/*TSMatrixM;//chengfu

TSMatrixN;

TSMatrixRes;

CreateMatrix(&M);

CreateMatrix(&N);

printf("matrixMisasfollow:

\n");

PrintMatrix(&M);

printf("matrixNisasfollow:

\n");

PrintMatrix(&N);

MultMatrix(&Res,M,N);

printf("TripleResisasfollow:

\n");

PrintTriple(&Res);

printf("matrixRESisasfollow:

\n");

PrintMatrix(&Res);*/

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2