数据结构课程设计方案稀疏矩阵运算器Word下载.docx

上传人:b****6 文档编号:19764989 上传时间:2023-01-09 格式:DOCX 页数:15 大小:136.87KB
下载 相关 举报
数据结构课程设计方案稀疏矩阵运算器Word下载.docx_第1页
第1页 / 共15页
数据结构课程设计方案稀疏矩阵运算器Word下载.docx_第2页
第2页 / 共15页
数据结构课程设计方案稀疏矩阵运算器Word下载.docx_第3页
第3页 / 共15页
数据结构课程设计方案稀疏矩阵运算器Word下载.docx_第4页
第4页 / 共15页
数据结构课程设计方案稀疏矩阵运算器Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构课程设计方案稀疏矩阵运算器Word下载.docx

《数据结构课程设计方案稀疏矩阵运算器Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计方案稀疏矩阵运算器Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构课程设计方案稀疏矩阵运算器Word下载.docx

二•概要设计

1.设定数组的抽象数据类型定义:

ADTSparseMatrix{

数据对象:

D={m和n分别称为矩阵的行数和列数}

数据关系:

R={Row,Col}

Row={<

ai,j,ai,j+1>

|1<

=i<

=m,a<

=j<

=n-1}

Col={<

ai,j,ai+1,j>

=m-1,a<

=n}

基本操作:

CreateSMatrix(&

M);

操作结果:

创建稀疏矩阵M。

DestorySMatrix(&

初始条件:

稀疏矩阵M存在。

销毁稀疏矩阵M。

PrintSMatrix(M);

操作结果:

输出稀疏矩阵M。

CopySMatrix(M,&

T);

由稀疏矩阵M复制得到T。

AddSMatrix(M,N,&

Q);

稀疏矩阵M与N的行数和列数对应相等。

求稀疏矩阵的和Q=M+N。

SubtSMatrix(M,N,&

Q);

求稀疏矩阵的差Q=M-N。

MultSMatrix(M,N,&

稀疏矩阵M的列数等于N的行数。

求稀疏矩阵乘积Q=M*N。

TransposeSMatrix(M,&

T);

稀疏矩阵M存在。

求稀疏矩阵M的转置矩阵T。

}ADTSparseMatrix

2.本程序包含的模块

(1)voidmain()

{

初始化;

do{接收命令;

处理命令;

}while(命令!

=退出);

}

(2)稀疏矩阵模块——实现稀疏矩阵抽象数据类型。

(3)稀疏矩阵求值模块——实现稀疏矩阵求值抽象数据类型。

稀疏矩阵求值模块包括:

矩阵相加模块AddRLSMatrix();

矩阵相减模块SubRLSMatrix();

相乘模块MulTSMatrix();

三•详细设计

typedefstruct//稀疏矩阵的三元组顺序表存储表示

inti,j;

//该非零元的行下标和列下标

inte;

}Triple;

typedefstruct

Tripledata[MAXSIZE+1];

//非零元三元组表,data[0]未用

intrpos[MAXRC+1];

//各行第一个非零元的位置表

intmu,nu,tu;

//矩阵的行数列数和非零元的个数

}RLSMatrix;

VoidCreateSMatrix(RLSMatrix*T)//输入创建稀疏矩阵

intk;

printf("

\n请输入矩阵行数、列数及非零元个数:

"

);

scanf("

%d%d%d"

&

T->

mu,&

nu,&

tu);

\n"

if(T->

tu>

MAXSIZE||T->

mu>

21)

{

printf("

非零个数超出定义范围!

出错!

"

exit(0);

}

for(k=1;

k<

=T->

tu;

k++)

请输入第%d个非零元素的行数,列数及其值:

k);

scanf("

data[k].i,&

data[k].j,&

data[k].e);

voidAddRLSMatrix(RLSMatrixM,RLSMatrixN,RLSMatrix*Q)//稀疏矩阵相加

intp,q,k=1;

if(M.mu!

=N.mu||M.nu!

=N.nu)

你的输入不满足矩阵相加的条件!

exit

(1);

Q->

mu=M.mu;

Q->

nu=M.nu;

for(p=1,q=1;

p<

=M.tu&

&

q<

=N.tu;

if(M.data[p].i==N.data[q].i)

{

if(M.data[p].j==N.data[q].j)

{

Q->

data[k].i=M.data[p].i;

data[k].j=M.data[p].j;

data[k].e=M.data[p].e+N.data[q].e;

p++;

q++;

k++;

}

elseif(M.data[p].j<

N.data[q].j)

data[k].e=M.data[p].e;

k++;

p++;

elseif(M.data[p].j>

data[k].i=N.data[q].i;

data[k].j=N.data[q].j;

data[k].e=N.data[q].e;

}

elseif(M.data[p].i<

N.data[q].i)

Q->

k++;

elseif(M.data[p].i>

if(p!

=M.tu+1)

for(;

=M.tu;

p++)

if(q!

=N.tu+1)

q++)

voidSubRLSMatrix(RLSMatrixM,RLSMatrixN,RLSMatrix*Q)//稀疏矩阵相减

你的输入不满足矩阵相减的条件!

data[k].e=M.data[p].e-N.data[q].e;

data[k].e=-N.data[q].e;

intMulTSMatrix(RLSMatrixM,RLSMatrixN,RLSMatrix*Q)//稀疏矩阵相乘

intccol=0,tp,brow,t,arow,p,q,i;

intctemp[MAXSIZE+1];

if(M.nu!

=N.mu)

printf("

你的输入不满足矩阵相乘的条件!

return0;

nu=N.nu;

tu=0;

if(M.tu*N.tu!

=0)

for(arow=1;

arow<

=M.mu;

++arow)

for(i=1;

i<

=N.nu;

i++)

ctemp[i]=0;

Q->

rpos[arow]=Q->

tu+1;

if(arow<

M.mu)tp=M.rpos[arow+1];

elsetp=M.tu+1;

for(p=M.rpos[arow];

tp;

++p)

brow=M.data[p].j;

if(brow<

N.mu)t=N.rpos[brow+1];

elset=N.tu+1;

for(q=N.rpos[brow];

t;

++q)

{

ccol=N.data[q].j;

ctemp[ccol]+=M.data[p].e*N.data[q].e;

}

for(ccol=1;

ccol<

=Q->

nu;

++ccol)

if(ctemp[ccol])

if(++Q->

MAXSIZE)return0;

Q->

data[Q->

tu].i=arow;

tu].j=ccol;

tu].e=ctemp[ccol];

return1;

}

voidPrintSMatrix(RLSMatrixQ)//输出稀疏矩阵

intk=1,row,line;

\n运算结果:

if(Q.tu==0)printf("

0"

else

for(row=1;

row<

=Q.mu;

row++)

for(line=1;

line<

=Q.nu;

line++)

if(Q.data[k].i==row&

Q.data[k].j==line)printf("

%d"

Q.data[k++].e);

elseprintf("

0"

\n\t"

voidmain()

RLSMatrixM,N,Q;

inti;

do

\t\t***************************\n"

\t\t稀疏矩阵运算器\n"

\t\t***************************\n\n"

\t\t1.矩阵相加\n\n"

\t\t2.矩阵相减\n\n"

\t\t3.矩阵相乘\n\n"

\t\t4.退出\n\n"

\t\t请选择:

%d"

i);

if(i==4)gotoend;

else

printf("

\n请输入第一个矩阵M:

\n请输入第二个矩阵N:

N);

switch(i)

case1:

AddRLSMatrix(M,N,&

break;

case2:

SubRLSMatrix(M,N,&

case3:

MulTSMatrix(M,N,&

default:

PrintSMatrix(Q);

getchar();

getchar();

end:

;

}while(i!

=4);

四•调试分析

(1)问题:

运行过程中发现加法减法能正常运行,而乘法却在存储数据步骤就出现问题。

解决:

经检查发现,由于在创建稀疏矩阵时没有输入矩阵相应的各行第一非零元的位置,所以在进行乘法运算时找不到矩阵的rpos值。

将rpos补上,乘法函数即可正常运行。

(2)问题:

当加减结果为零矩阵时,输出结果是一个由0构成的矩阵,而不是数值0。

经检查发现,加减法函数过程中没有判断Q->

tu的值,导致在输出函数里没有执行针对该情况的if判断语句。

在加减函数里,每增加一个非零元,Q->

tu加一。

(3)问题:

输出矩阵时,输出界面不整齐,非标准矩阵形式。

利用\n\t及空格号使界面比较美观。

五、用户手册

1.本程序的运行环境为XP操作系统,执行文件为:

shiyan2.exe。

2.进入演示程序后的界面:

 

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

当前位置:首页 > 高中教育 > 小学教育

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

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