稀疏矩阵的存储和快速转置实验报告.docx

上传人:b****4 文档编号:4674793 上传时间:2022-12-07 格式:DOCX 页数:9 大小:34.49KB
下载 相关 举报
稀疏矩阵的存储和快速转置实验报告.docx_第1页
第1页 / 共9页
稀疏矩阵的存储和快速转置实验报告.docx_第2页
第2页 / 共9页
稀疏矩阵的存储和快速转置实验报告.docx_第3页
第3页 / 共9页
稀疏矩阵的存储和快速转置实验报告.docx_第4页
第4页 / 共9页
稀疏矩阵的存储和快速转置实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

稀疏矩阵的存储和快速转置实验报告.docx

《稀疏矩阵的存储和快速转置实验报告.docx》由会员分享,可在线阅读,更多相关《稀疏矩阵的存储和快速转置实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

稀疏矩阵的存储和快速转置实验报告.docx

稀疏矩阵的存储和快速转置实验报告

福建工程学院

 

课程设计

 

课程:

数据结构

题目:

稀疏矩阵的快速转置

专业:

运算机类

班级:

座号:

姓名:

 

2021年6月25日

实验题目:

稀疏矩阵的快速转置

一、要解决的问题

利用三元组表存储稀疏矩阵,利用快速转置算法进行转置,并输出转置之前和以后的三元组表和矩阵。

二、算法大体思想描述:

由于稀疏矩阵的非零元素较少,零元素较多,因此只需存储其非零元素。

因此能够成立一个三元组表,别离保存稀疏矩阵的非零元素的行号、列号和元素值。

对稀疏矩阵进行快速转置是能够引入两个向量num[n+1],cpot[n+1],别离标记矩阵中第col列的非零元素个数和第一个非零元素在转置后的矩阵的位置;再扫描三元组表,找到非零元素,直接对其在转置后的矩阵所在的位置上进行修改,以节省时刻。

三、详细设计

⒈元素类型,结点类型

typedefstruct{

inti,j;

inte;

}Triple;

typedefstruct{

Tripledata[MAXSIZE+1];

intmu,nu,tu;

}Tsmatrix;

2.对抽象数据类型中的部份大体操作的伪码算法如下:

Tsmatrix*creatarray(Tsmatrix*M)

{intm,n,p=1;

intc;

printf("pleaseinputthearrayA:

\n");

for(m=1;m<=a;m++)

for(n=1;n<=b;n++)

{scanf("%d",&c);

if(c!

=0)

{M->data[p].e=c;

M->data[p].i=m;

M->data[p].j=n;

p++;

}

}

M->tu=p;M->mu=a;M->nu=b;

printf("yuanlaisanyuanzudebiaoshiwei:

\n\n");

for(m=1;m<=M->tu;m++)

printf("%3d%3d%3d\t",M->data[m].i,M->data[m].j,M->data[m].e);

printf("\n");

returnM;

}

/*三元组快速转置*/

Tsmatrix*fasttrans(Tsmatrix*M,Tsmatrix*T)

{intp,col,q,t,m;

intnum[100];

intcpot[100];

T->mu=M->nu;T->nu=M->mu;T->tu=M->tu;

if(T->tu!

=0)

{

for(col=1;col<=M->nu;col++)num[col]=0;

for(t=1;t<=M->tu;t++)++num[M->data[t].j];

cpot[1]=1;

for(col=2;col<=M->nu;col++)cpot[col]=cpot[col-1]+num[col-1];

for(p=1;p<=M->tu;++p)

{col=M->data[p].j;q=cpot[col];

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[p].e;

++cpot[col];

}

}

printf("\n\nzhuanzhihoudesanyuanzubiaoshiwei:

\n\n");

for(m=1;m<=T->tu;m++)

printf("%3d%3d%3d\t",T->data[m].i,T->data[m].j,T->data[m].e);

printf("\n");

returnT;

}

/*输出三元组函数*/

voidprint(Tsmatrix*T,intx,inty)

{intm,n,p=1;

intd;

for(m=1;m<=x;m++)

{printf("\n");

for(n=1;n<=y;n++)

{if(T->data[p].i==m&&T->data[p].j==n)

{d=T->data[p].e;

p++;

}

elsed=0;

printf("%6d",d);

}

}

}

}3.主函数和其他函数的伪码算法

voidmain()

{Tsmatrix*M,*T;

M=(Tsmatrix*)malloc(sizeof(Tsmatrix));

T=(Tsmatrix*)malloc(sizeof(Tsmatrix));

printf("pleaseinputarray'srowandcol:

\n");

scanf("%d%d",&a,&b);/*输入行列数*/

M=creatarray(M);/*创建稀疏矩阵*/

printf("youhadcreatthearray:

\n");

print(M,a,b);/*输出创建好的三元组*/

T=fasttrans(M,T);/*将三元组转置*/

printf("thetransarrayis:

\n");

print(T,b,a);

getch();

}

 

4、模块结构及功能

}

四、源程序清单:

#include<>

#defineMAXSIZE100

typedefstruct{

inti,j;

inte;

}Triple;

typedefstruct{

Tripledata[MAXSIZE+1];

intmu,nu,tu;

}Tsmatrix;

inta,b;/*概念全局变量数组的行数a和列数b*/

/*用数组创建三元组*/

Tsmatrix*creatarray(Tsmatrix*M)

{intm,n,p=1;

intc;

printf("pleaseinputthearrayA:

\n");

for(m=1;m<=a;m++)

for(n=1;n<=b;n++)

{scanf("%d",&c);

if(c!

=0)

{M->data[p].e=c;

M->data[p].i=m;

M->data[p].j=n;

p++;

}

}

M->tu=p;M->mu=a;M->nu=b;

printf("yuanlaisanyuanzudebiaoshiwei:

\n\n");

for(m=1;mtu;m++)

printf("%3d%3d%3d\t",M->data[m].i,M->data[m].j,M->data[m].e);

printf("\n");

returnM;

}

/*三元组快速转置*/

Tsmatrix*fasttrans(Tsmatrix*M,Tsmatrix*T)

{intp,col,q,t,m;

intnum[100];

intcpot[100];

T->mu=M->nu;T->nu=M->mu;T->tu=M->tu;

if(T->tu!

=0)

{

for(col=1;col<=M->nu;col++)num[col]=0;

for(t=1;t<=M->tu;t++)++num[M->data[t].j];

cpot[1]=1;

for(col=2;col<=M->nu;col++)cpot[col]=cpot[col-1]+num[col-1];

for(p=1;p<=M->tu;++p)

{col=M->data[p].j;q=cpot[col];

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[p].e;

++cpot[col];

}

}

printf("\n\nzhuanzhihoudesanyuanzubiaoshiwei:

\n\n");

for(m=1;mtu;m++)

printf("%3d%3d%3d\t",T->data[m].i,T->data[m].j,T->data[m].e);

printf("\n");

returnT;

}

/*输出三元组函数*/

voidprint(Tsmatrix*T,intx,inty)

{intm,n,p=1;

intd;

for(m=1;m<=x;m++)

{printf("\n");

for(n=1;n<=y;n++)

{if(T->data[p].i==m&&T->data[p].j==n)

{d=T->data[p].e;

p++;

}

elsed=0;

printf("%6d",d);

}

}

}

voidmain()

{Tsmatrix*M,*T;

M=(Tsmatrix*)malloc(sizeof(Tsmatrix));

T=(Tsmatrix*)malloc(sizeof(Tsmatrix));

printf("pleaseinputarray'srowandcol:

\n");

scanf("%d%d",&a,&b);/*输入行列数*/

M=creatarray(M);

printf("youhadcreatthearray:

\n");

print(M,a,b);

T=fasttrans(M,T);

printf("thetransarrayis:

\n");

print(T,b,a);

getch();

}

五、测试数据及测试结果:

(1)我输入的稀疏矩阵为:

(2)回车显示的结果是:

六、课程设计总结及心得体会:

通过本次课程设计,我对有关稀疏矩阵及其三元组表的知识做了温习和巩固。

在课程设计的进程中,碰到了很多问题,如稀疏矩阵操作中对矩阵信息统计犯错的问题。

我为此在程序中加入printf语句,通过该语句是不是输出,找到致使运行犯错的位置,再进行改动调试,最终解决了问题,同时也加深了对两个程序的明白得。

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1