数据结构课程设计基本稀疏矩阵运算的运算器Word文档格式.docx
《数据结构课程设计基本稀疏矩阵运算的运算器Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计基本稀疏矩阵运算的运算器Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计基本稀疏矩阵运算的运算器Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/24/295f777b-0100-457f-b052-89c67f9ce389/295f777b-0100-457f-b052-89c67f9ce3891.gif)
二、概要设计
1、抽象数据类型三元组的定义如下:
ADTTriple
{
数据对象:
D={ai|ai(-ElemSet,i=1,2,...,n,n>
=0};
数据关系:
R1={<
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;
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、各种操作函数源代码:
A){
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)
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++].e=A.date[i].e+B.date[j].e;
elseif(A.date[i].col>
B.date[j].col)
elseif(A.date[i].col<
不能相加~"
C)//相减
for(intk=0;
k<
B.len;
k++)
B.date[k].e=-B.date[k].e;
add(A,B,C);
不能相减~"
for(k=0;
intsearch(TSMatrixA,intm,intn){
intflag=-1;
if(A.date[i].row==m&
A.date[i].col==n)
flag=i;
break;
returnflag;
C)//相乘
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;
C.date[flag].e=C.date[flag].e+A.date[i].e*B.date[j].e;
{cout<
不能相乘~"
endl;
voidprint(TSMatrixA){
inti,j;
intM[MAXSIZE][MAXSIZE];
A.m;
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++;
|"
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);
case1:
if(A.m==0||B.m==0)
未建矩阵"