《数据结构 课程设计》稀疏矩阵实验报告Word格式.docx
- 文档编号:5076115
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:13
- 大小:42.19KB
《数据结构 课程设计》稀疏矩阵实验报告Word格式.docx
《《数据结构 课程设计》稀疏矩阵实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《《数据结构 课程设计》稀疏矩阵实验报告Word格式.docx(13页珍藏版)》请在冰点文库上搜索。
稀疏矩阵的保存:
以一位数组顺序存放非零元素的行号、列号和数值,行号为-1作为结束符。
以三个一维数组存放一个系数矩阵中的一个非零元素,为零额元素则不保存。
用一个二重循环来实现判断每个系数矩阵的非零元素是否为零,不为零,就将其行列下标和其值存入一维数组中
稀疏矩阵的相加:
用循环来判断存储A何B稀疏矩阵的两个一维数组中的行列下标是否相等和其大小关系。
若相等,则将两个一维数组的第三个元素的值相加存入新的数组C里,行列下标不变的存入进去;
若A的列小于B的列,则将A的三个元素直接存入C中;
若B的列小于A的列,则将B的三个元素村日C中;
若A的行小于B的行,则将A的三个元素存入C中;
若A的行大于B的行,则将B存入C中。
3、概要设计
定义两个矩阵a=00300000b=02000000
0000005000040000
0000000000000600
0000700000008000
0000000000100000
0900000000000000
定义两个数组A和B,用于存储矩阵a和矩阵b的值;
定义一个数组C,用于存放数组A和数组B相加后的结果。
(2)系数矩阵的存储
用一维数组存放系数矩阵A如下:
A[0]=0,A[1]=2,A[2]=3,A[3]=1,A[4]=6,A[5]=5,A[6]=3,A[7]=4,A[8]=7,A[9]=5,A[10]=1,A[11]=9,A[12]=-1。
用一维数组存放系数矩阵B如下:
B[0]=0,B[1]=1,B[2]=2,B[3]=1,B[4]=3,B[5]=4,B[6]=2,B[7]=5,B[8]=6,B[9]=3,B[10]=4,B[11]=8,B[12]=4,B[13]=2,B[14]=1,B[15]=-1。
四、详细设计
(1)稀疏矩阵的转存:
voidCreateMatrix(intA[m][n],intB[50]),这是一个将稀疏矩阵转存的函数,类似于顺序存储三元组表。
在这个方法中,只要用一个二重循环来判断每个矩阵元素是否为零,若不为零,则将其行、列下标及其值存入到一维数组B中对应的元素。
在定义函数的过程中,我们需要定义一个for循环,以完成行和列的转换及存储。
在函数的末尾我们定义一个B[K]=-1,用于结束非零元素的存储。
算法如下:
voidCreateMatrix(intA[m][n],intB[50])
{
inti,j,k=0;
for(i=0;
i<
m;
i++)
for(j=0;
j<
n;
j++)
if(A[i][j]!
=0){
B[k]=i;
k++;
B[k]=j;
B[k]=A[i][j];
}
B[k]=-1;
}
voidMatrixAdd(intA[max],intB[max],intC[max]),这个函数用于实现数组A和数组B的相加,并将其相加的结果存入数组C。
这个函数讨论了数组在相加的过程中的几种情况:
a、A数组和B数组的行相等且列相等,两者直接相加后存入数组C中。
if(A[i]==B[j])
{
if(A[i+1]==B[j+1])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2]+B[j+2];
k=k+3;
i=i+3;
j=j+3;
}
b、A的列小于B的列,将A的三个元素直接存入C中
if(A[i+1]<
B[j+1])
C[k+2]=A[i+2];
c、B的列小于A的列,将B的三个元素直接存入C中
if(A[i+1]>
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
d、A的行小于B的行,将A的三个元素直接存入C中
if(A[i]<
B[j])
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
e、B的行小于A的行,将B的三个元素直接存入C中
if(A[i]>
C[k]=B[j];
f、A结束B还有元素,将B的所有元素直接存入C中
if(A[i]==-1)
while(B[j]!
=-1)
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
j=j+3;
g、B结束A还有元素,将A的所有元素直接存入C中
if(B[i]==-1)
while(A[i]!
C[k+1]=A[i+1];
i=i+3;
最后定义C[k]=-1,结束算法。
5、运行与测试
6、总结与心得
在本次试验中,我掌握了稀疏矩阵的存储与转存的相关知识,了解了两个稀疏矩阵的相加后的知识,并实现了稀疏矩阵的加法,明白在计算机中我们对稀疏矩阵的处理,可以很大程度上的节约我们的存储空间,是压缩原理的雏形。
参考文献
【1】《数据结构》严蔚敏.清华大学出版社.
【2】《数据结构课程设计》苏仕华.极械工业出版社.
【3】《程序设计》谭浩强.清华大学出版社.
源代码
#include<
stdio.h>
#definem6
#definen8
#definemax50
//稀疏矩阵存储在数组中
{
for(j=0;
if(A[i][j]!
=0)
B[k]=i;
k++;
B[k]=j;
B[k]=A[i][j];
B[k]=-1;
//两个稀疏矩阵存储到两个数组中后相加存储到另一个数组中
voidmatrixadd(intA[max],intB[max],intC[max])
inti=0,j=0,k=0;
while(A[i]!
=-1&
&
B[j]!
if(A[i]==B[j])
if(A[i+1]==B[j+1])
C[k]=A[i];
C[k+2]=A[i+2]+B[j+2];
k=k+3;
j=j+3;
elseif(A[i+1]<
C[k+2]=A[i+2];
else
C[k+1]=B[j+1];
C[k+2]=B[j+2];
elseif(A[i]<
else
if(A[i]==-1)
while(B[j]!
j=j+3;
while(A[i]!
C[k]=-1;
//主函数
voidmain()
intE[m][n],F[m][n],A[max],B[max],C[max];
inti,j,k;
printf("
输入稀疏矩阵E(%d,%d):
\n"
m,n);
i++)//输入稀疏矩阵E
scanf("
%d"
&
E[i][j]);
输入稀疏矩阵F(%d,%d):
i++)//输入稀疏矩阵F
F[i][j]);
creatematrix(E,A);
//E稀疏矩阵存储在数组A中
creatematrix(F,B);
//F稀疏矩阵存储在数组B中
matrixadd(A,B,C);
//相加
i=0;
j=0;
k=0;
A数组内容如下:
);
%5d,%5d,%5d\n"
A[i],A[i+1],A[i+2]);
B数组内容如下:
while(B[j]!
B[j],B[j+1],B[j+2]);
C数组内容如下:
while(C[k]!
C[k],C[k+1],C[k+2]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 数据结构 课程设计稀疏矩阵实验报告 数据结构 课程设计 稀疏 矩阵 实验 报告