数据结构课程设计基本稀疏矩阵运算的运算器Word文档下载推荐.docx
- 文档编号:19117871
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:15
- 大小:83.57KB
数据结构课程设计基本稀疏矩阵运算的运算器Word文档下载推荐.docx
《数据结构课程设计基本稀疏矩阵运算的运算器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计基本稀疏矩阵运算的运算器Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
ai-1,ai>
|ai-1,ai(-D,i=2,...,n}
基本操作:
略
}
2、基于三元组顺序表表示的矩阵操作:
(1)创建三元组顺序表表示的矩阵:
voidcreateMatrix(TSMatrix&
A)
(2)初始化矩阵:
voidinitMatrix(TSMatrix&
(3)相加:
voidadd(TSMatrixA,TSMatrixB,TSMatrix&
C)
(4)相减:
voidsub(TSMatrixA,TSMatrix&
B,TSMatrix&
(5)找m行n列元素在A中顺序表中的位置:
intsearch(TSMatrixA,intm,intn)
(6)相乘;
voidmult(TSMatrixA,TSMatrixB,TSMatrix&
(7)输入以阵列形式表示的矩阵:
voidprint(TSMatrixA)
3、主程序
Voidmain()
{
While(true)
调用相应函数执行相应操作;
输出操作结果;
4、本程序只有两个模块,调用关系简单:
三、详细设计
1、三元组结构描述:
#defineMAXSIZE20
usingnamespacestd;
typedefstruct
introw;
intcol;
inte;
}Triple;
typedefstruct
Tripledate[MAXSIZE];
intm,n,len;
}TSMatrix;
A.len=0;
A.m=0;
A.n=0;
for(inti=0;
i<
MAXSIZE;
i++)
A.date[i].col=0;
A.date[i].e=0;
A.date[i].row=0;
}
2、各种操作函数源代码:
initMatrix(A);
cout<
<
"
创建矩阵:
;
请输入矩阵的行列值及非0元素个数\n"
cin>
>
A.m>
A.n>
A.len;
请输入第"
个非0元素对应的行、列、值:
A.date[i].row;
A.date[i].col;
A.date[i].e;
C)//相加
if(A.m==B.m&
&
A.n==B.n)
inti=0,j=0;
intk=0;
C.m=A.m;
C.n=A.n;
while(i<
A.len||j<
B.len)
if(i==A.len&
j<
{
C.date[k].col=B.date[j].col;
C.date[k].row=B.date[j].row;
C.date[k++].e=B.date[j].e;
C.len++;
j++;
}
elseif(i<
A.len&
j==B.len)
C.date[k].col=A.date[i].col;
C.date[k].row=A.date[i].row;
C.date[k++].e=A.date[i].e;
i++;
else
if(A.date[i].row>
B.date[j].row)
{
C.date[k].col=B.date[j].col;
}
elseif(A.date[i].row<
if(A.date[i].col==B.date[j].col)
{
if(A.date[i].e+B.date[j].e!
=0)
{
C.date[k].col=A.date[i].col;
C.date[k].row=A.date[i].row;
C.date[k++].e=A.date[i].e+B.date[j].e;
C.len++;
}
i++;
j++;
}
elseif(A.date[i].col>
B.date[j].col)
C.date[k].col=B.date[j].col;
C.date[k].row=B.date[j].row;
C.date[k++].e=B.date[j].e;
j++;
elseif(A.date[i].col<
C.date[k].col=A.date[i].col;
C.date[k++].e=A.date[i].e;
else
cout<
不能相加!
C)//相减
for(intk=0;
k<
B.len;
k++)
B.date[k].e=-B.date[k].e;
add(A,B,C);
else
不能相减!
for(k=0;
intflag=-1;
if(A.date[i].row==m&
A.date[i].col==n)
flag=i;
break;
returnflag;
C)//相乘
inti=0,j=0;
if(A.n==B.m)
C.n=B.n;
for(i=0;
for(j=0;
j++)
if(A.date[i].col==B.date[j].row)
intflag=search(C,A.date[i].row,B.date[j].col);
if(flag==-1)
C.date[C.len].col=B.date[j].col;
C.date[C.len].row=A.date[i].row;
C.date[C.len++].e=A.date[i].e*B.date[j].e;
else
C.date[flag].e=C.date[flag].e+A.date[i].e*B.date[j].e;
{cout<
不能相乘!
endl;
intk=0;
inti,j;
intM[MAXSIZE][MAXSIZE];
for(i=0;
A.m;
for(j=0;
A.n;
M[i][j]=0;
while(k<
A.len)
M[A.date[k].row-1][A.date[k].col-1]=A.date[k].e;
k++;
|"
cout<
M[i][j]<
"
|"
voidshowtip()
------------请选择要执行的操作--------"
0---创建矩阵"
1---A+B"
2---A-B"
3---A*B"
4---退出"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
3、主函数:
voidmain()
TSMatrixA,B,C;
initMatrix(B);
initMatrix(C);
showtip();
inti;
i;
while(true)
switch(i)
case0:
system("
cls"
);
创建矩阵A:
createMatrix(A);
创建矩阵B:
createMatrix(B);
showtip();
break;
case1:
if(A.m==0||B.m==0)
未建矩阵"
initMatrix(C);
add(A,B,C);
if(A.m==B.m&
加的结果;
print(A);
+"
print(B);
="
print(C);
case2:
sub(A,B,C);
减的结果;
case3:
if(A.m==0||B.m==0)
mult(A,B,C);
if(A.n==B.m)
乘后的结果;
print(A);
*"
case4:
exit(0);
四、调试分析
1、由于本程序涉及的函数比较多,所以开始时在函数调用上出现了混乱,把自己都给搞糊涂了,后来经仔细排查,最终发现了错误。
2、一开始看这个题目时,感觉以前似乎做过,觉得很简单,所以没有进行认真分析就开始急着写程序,写了一点后发现没思路了,怎么也写不下出了,搞了半天结果什么也没写出来。
所以得出经验,以后写程序必须先分析好思路,然后才开始着手去写,这样能达到现半功倍的效果。
3、矩阵的加和减,在表面上看似乎很相似,只要把加改减就能完成任务,其实不然。
五、用户手册
1、本程序的运行环境为DOS操作环境,文件名为约瑟夫环.exe;
2、本例演示程序简单明了,按菜单提示操作即可。
六、测试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 基本 稀疏 矩阵 运算 运算器