数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx
- 文档编号:7368303
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:13
- 大小:16.14KB
数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx
《数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx》由会员分享,可在线阅读,更多相关《数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法.docx(13页珍藏版)》请在冰点文库上搜索。
数据结构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;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言 实现 稀疏 矩阵 压缩 运算 三元 顺序 表表