数据结构课程设计稀疏矩阵Word文档下载推荐.docx

上传人:b****4 文档编号:6489932 上传时间:2023-05-06 格式:DOCX 页数:18 大小:162.03KB
下载 相关 举报
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第1页
第1页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第2页
第2页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第3页
第3页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第4页
第4页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第5页
第5页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第6页
第6页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第7页
第7页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第8页
第8页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第9页
第9页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第10页
第10页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第11页
第11页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第12页
第12页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第13页
第13页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第14页
第14页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第15页
第15页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第16页
第16页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第17页
第17页 / 共18页
数据结构课程设计稀疏矩阵Word文档下载推荐.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计稀疏矩阵Word文档下载推荐.docx

《数据结构课程设计稀疏矩阵Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计稀疏矩阵Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。

数据结构课程设计稀疏矩阵Word文档下载推荐.docx

(2)程序可以对三元组的输入顺序加以限制,例如,按行优先。

(3)在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放

二概要设计

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();

三详细设计

#include<

stdio.h>

stdlib.h>

#defineMAXSIZE20

#defineMAXRC20

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;

system("

cls"

┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"

┃㊣必做题,稀疏矩阵运算器㊣┃\n"

┃姓名:

xxxxx┃\n"

┃学号:

xxxxxxxxxxxx┃\n"

┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"

do

printf("

╔════════════════════════════════╗\n"

║欢迎进入稀疏矩阵运算器║\n"

║-------------------------------------------║\n"

║1.矩阵相加║\n"

║2.矩阵相减║\n"

║3.矩阵相乘║\n"

║4.退出系统║\n"

╚════════════════════════════════╝\n"

>

请选择功能(1-4):

%d"

i);

if(i==4)gotoend;

else

\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.本程序的运行环境为WIN7操作系统,执行文件为:

phonesystem.exe。

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

(1)主界面

(2)矩阵相加

(3)矩阵相减

(4)矩阵相乘

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2