数据库课程设计 稀疏矩阵.docx
- 文档编号:23662592
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:13
- 大小:150.90KB
数据库课程设计 稀疏矩阵.docx
《数据库课程设计 稀疏矩阵.docx》由会员分享,可在线阅读,更多相关《数据库课程设计 稀疏矩阵.docx(13页珍藏版)》请在冰豆网上搜索。
数据库课程设计稀疏矩阵
目录
1设计题目4
1.1任务4
1.3输入5
1.4输出5
2.概要设计6
2.1数据需求分析6
2.2功能需求分析6
2.3数据结构设计6
2.3.1ADT描述6
3.详细设计7
3.1各个程序的实现图7
3.2源程序设计7
4.调试分析8
4.1程序运行截图
5.设计总结9
参考文献10
1设计题目:
稀疏矩阵操作
1.1任务
(1)完成一稀疏矩阵转置,
(2)能够完成两个稀疏矩阵相加,
(3)输出稀疏矩阵
1.2要求
在上交资料中请写明:
存储结构、稀疏矩阵相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
1.3输入
1.4输出
2概要设计
2.1数据需求分析
假设稀疏矩阵M和N均以三元组表作为存储结构;
另设三元组表存放结果矩阵。
2.2功能需求分析
1.输入稀疏矩阵M和N。
2.检测M和N能否相加
3.矩阵相加运算
4.打印输出结果
矩阵相加测试实例:
输入
M=,N=
2.3数据结构设计
2.31.ADT描述:
ADTSparseMatrix{
数据对象:
m和n分别称为矩阵的行数和列数}
数据关系:
R={Row,Col}
基本操作:
CreateSMatrix(&M);
操作结果:
创建稀疏矩阵M。
AddSMatrix(M,N,&Q);
初始条件:
稀疏矩阵M与N的行数列数相等。
操作结果:
求得Q=M+N。
PrintSMatrix(M);
初始条件:
稀疏矩阵M存在。
操作结果:
输出稀疏矩阵M。
}ADTSparseMatrix
3详细设计
(1)各函数的实现图
(2)源程序:
#include
#include
#defineMAXSIZE100
typedefstruct
{
inti,j;
inte;
}Triple;
typedefstruct
{
Tripledata[MAXSIZE+1];
intmu,nu,tu;//mu,nu为稀疏矩阵的行列数,tu是稀疏矩阵的非零元素个数
}TSMatrix;
TSMatrixM,T,S,B,C;
voidCreateMatrix(TSMatrix&M)
{
inti,elem,col,row,mu,nu,tu;
printf(“请输入系数矩阵的行数,列数和非零元素个数:
\n”);
scanf(“%d%d%d”,&mu,&nu,&tu);
M.mu=mu;
M.nu=nu;
M.tu=tu;
for(i=1;i<=tu;i++)
{
printf(“情输入非零元素的行号,列号和值:
\n”);
scanf(“%d%d%d”,&col,&row,&elem);
if(mu<=1||col>M.mu||nu<=1||row>M.nu)
{
printf(“error!
”);
exit(0);
}
else
{
M.data[i].i=col;//输出这个三元组
M.data[i].j=row;
M.data[i].e=elem;
}
}
}
voidFastTransposeSMatrix(TSMatrixM)/*求转置矩阵*/
{
intnum[100];
intcpot[100];
intp,q,t,col=0;
T.mu=M.mu;
T.nu=M.nu;
T.tu=M.tu;
if(T.tu)
{
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]++;
}
}TSMatrix(T);
}
voidTSMatrix_add(TSMatrixM,TSMatrixT,TSMatrix&ADD)
{
inta=1,b=1,c=1,x;
ADD.mu=M.mu;ADD.nu=M.nu;ADD.tu=0;
for(x=1;x<=M.mu;x++)
{
while(M.data[a].i==x&&T.data[b].i==x)
{
if(M.data[a].j==T.data[b].j)
{
ADD.data[c].i=M.data[a].i;
ADD.data[c].j=M.data[a].j;
ADD.data[c].e=M.data[a].e+T.data[b].e;
c++;a++;b++;
}
elseif(M.data[a].j { ADD.data[c].i=M.data[a].i; ADD.data[c].j=M.data[a].j; ADD.data[c].e=M.data[a].e; c++;a++; } else { ADD.data[c].i=T.data[b].i; ADD.data[c].j=T.data[b].j; ADD.data[c].e=T.data[b].e; c++;b++; } } while(M.data[a].i==x) { ADD.data[c].i=M.data[a].i; ADD.data[c].j=M.data[a].j; ADD.data[c].e=M.data[a].e; c++;a++; } while(T.data[b].i==x) { ADD.data[c].i=T.data[b].i; ADD.data[c].j=T.data[b].j; ADD.data[c].e=T.data[b].e; c++;b++; } } ADD.tu=c-1; } voidShowMatrix(TSMatrix&M) { inti=1,j=1,ir=1; //printf(“稀疏矩阵为: \n’’); for(i=1;i<=M.mu;i++) { for(j=1;j<=M.nu;j++) { if(M.data[dir].i==i&&M.data[dir].j==j) { printf(“%d“,M.data[dir].e); dir++; } else printf(“0“); } printf(“\n”); } } voidmain() { while (1) { intc; M.mu=0; M.nu=0; M.tu=0; printf(“创建一个稀疏矩阵A: \n”); printf(“求转置矩阵A: \n”); printf(“创建一个稀疏矩阵B: \n”); printf(“求转置矩阵B: \n”); printf(“求A与B院矩阵的和: \n”); while (1) { printf(“请选择: ”); scanf(“%d”,&c); switch(c) { case1: CreateMatrix(M);break; case2: FastTransposeSMatrix(M); printf(“原矩阵A为: \n”); ShowMatrix(M); printf(“转置矩阵为: \n”); ShowMatrix(T);break; case3: CreateMatrix(B);break; case4: FastTransposeSMatrix(B); printf(“原矩阵B为: \n”); ShowMatrix(B); printf(“转置矩阵为: \n”); ShowMatrix(T);break; case5: FastTransposeSMatrix(M); TSMatrix_add(M,B,S); printf(“A与B原矩阵的和为: \n”); ShowMatrix(S);break; } } } } 4.调试分析 (1)选择选项1,创建矩阵A;选择选项2,转置矩阵A (2)选择选项3,创建矩阵B;选择选项4,转置矩阵B (3)选择选项5,原矩阵A与B实现相加操作 5.设计总结 调试程序时,应该注意矩阵的调用。 比如,开始的时候没有注意将程序调用! 尽管实现了矩阵的转置和相加,但没有符合题意。 在调试时,我才意识到以前老是犯一个错误,就是在最后加了个return0,这是错误的! 参考文献 格式要求如下: 1专著著录格式 [序号]著者.书名[M].版本(第一版不写).出版地: 出版者,出版年.起止页码 例: [1]孙家广,杨长青.计算机图形学[M].北京: 清华大学出版社,1995.26~28 [2]SkolinkMI.Radarhandbook[M].NewYork: McGraw-Hill,1990 2期刊著录格式 [序号]作者.题名[J].刊名,出版年份,卷号(期号): 起止页码 例: [3]李旭东,宗光华,毕树生,等.生物工程微操作机器人视觉系统的研究[J].北京航空航天大学学报,2002,28(3): 249~252
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库课程设计 稀疏矩阵 数据库 课程设计 稀疏 矩阵