数据结构 课程设计Word文档格式.docx

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

数据结构 课程设计Word文档格式.docx

《数据结构 课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构 课程设计Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

数据结构 课程设计Word文档格式.docx

=

*

二.设计思路

A.行逻辑链接的顺序表为了便于随机存取任意一行的非零元,则需知道每一行的第一个非零元在三元组表中的位置。

为此,可将指示“行”信息的辅助数组cpot固定在稀疏矩阵的存储结构中

B.数据结构的选用为了实现稀疏矩阵的各种运算,采用三元组的方式储存矩阵

C.矩阵的各种运算为了求2和矩阵的各类运算,只需要在相乘2个矩阵中相对应的各个元素的j值和i值相运算即可

三.解决问题

【主程序模块】:

voidmain()

{

初始化;

do{

接受命令;

处理命令;

}while(命令!

=“退出”);

}

【功能模块调用关系图】

主程序模块

创建稀疏矩阵模块

运算稀疏矩阵模块

打印稀疏矩阵模块

【详细设计】

稀疏矩阵运算器

矩阵相乘

矩阵相加

矩阵相减

退出本系统

输入矩阵1

输入矩阵2

计算结果

typedefstruct{

introw;

//行数

intcol;

//列数

intv;

//非零元素值

}triplenode;

triplenodedata[maxsize+1];

//非零元三元组

introwtab[maxrow+1];

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

intmu,nu,tu;

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

}rtripletable;

voidcreat(rtripletable&

A)//创建稀疏矩阵

voidprint(rtripletableA)//输出稀疏矩阵

intaddsmatrix(rtripletableM,rtripletableN)//矩阵相加

intsubsmatrix(rtripletableM,rtripletableN)//稀疏矩阵相减

voidmultsmatrix(rtripletableM,rtripletableN,rtripletable&

Q)//稀疏矩阵相乘

四.实现

1.功能函数设计

ADTArray{

数据对象:

D={aij|0≤i≤b1-1,0≤j≤b2-1}

数据关系:

R={ROW,COL}

ROW={<

ai,j,ai+1,j>

|0≤i≤b1-2,0≤j≤b2-1}

COL={<

ai,j,ai,j+1>

|0≤i≤b1-1,0≤j≤b2-2}

基本操作:

CreateSMatrix(&

M);

//操作结果:

创建稀疏矩阵M.

PrintSMatrix(M);

//初始化条件:

稀疏矩阵M存在.

//操作结果:

输出稀疏矩阵M.

AddSMatrix(M,N,&

Q);

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

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

SubSMatrix(M,N,&

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

MultSMatrix(M,N,&

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

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

}ADTArray

【源程序】

#include<

stdio.h>

stdlib.h>

iostream.h>

#definemaxsize100

#definemaxrow100

#defineOK1

#defineERROR-1

typedefstruct

introw;

intcol;

intv;

triplenodedata[maxsize+1];

introwtab[maxrow+1];

intmu,nu,tu;

intk=1,sum=1,loop,p,t;

intnum[maxrow+1];

cout<

<

"

请输入矩阵的行数和列数:

endl;

行数:

;

cin>

>

A.mu;

列数:

A.nu;

非零元素个数:

A.tu;

请以空格隔开的形式输入非零元的行、列、值."

for(loop=1;

loop<

=A.tu;

loop++)

{

cin>

A.data[loop].row>

A.data[loop].col>

A.data[loop].v;

}

for(p=1;

p<

=A.mu;

p++)num[p]=0;

//A三元组每一列的非零元素个数

for(t=1;

t<

t++)++num[A.data[t].row];

//求A中每一列含非零元个数

A.rowtab[1]=1;

//求第p列中第一个非零元在A.data中的序号

for(t=2;

t++)A.rowtab[t]=A.rowtab[t-1]+num[t-1];

return;

intresult[maxrow+1][maxrow+1];

intloop1,loop2;

for(loop1=1;

loop1<

loop1++)

for(loop2=1;

loop2<

=A.nu;

loop2++)

result[loop1][loop2]=0;

//初始化为0

for(loop1=1;

result[A.data[loop1].row][A.data[loop1].col]=A.data[loop1].v;

{

cout<

|"

for(loop2=1;

cout<

result[loop1][loop2]<

//输出所做运算的结果

}

{

if(M.mu!

=N.mu)//行数相等才能相加

cout<

出错"

rtripletableQ;

Q.mu=M.mu;

Q.nu=N.nu;

intp,q,k;

p=1;

q=1;

k=1;

while(p<

=M.tu&

&

q<

=N.tu)//两个稀疏矩阵存在

if(M.data[p].row==N.data[q].row)//两个稀疏矩阵的行数相等

if(M.data[p].col==N.data[q].col)//两个稀疏矩阵的列数相等

{

if(M.data[p].v+N.data[q].v!

=0)//两个稀疏矩阵相加的结果不为0

{

Q.data[k].row=M.data[p].row;

Q.data[k].col=M.data[p].col;

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

++k;

}

++q;

++p;

}

elseif(M.data[p].col<

N.data[q].col)//第一个稀疏矩阵列数小于第二个稀疏矩阵列数

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

//把M中的所有信息都赋给Q

++p;

else

//第一个稀疏矩阵列数大于第二个稀疏矩阵的列数

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

++q;

elseif(M.data[p].row<

N.data[q].row)

//第一个稀疏矩阵行列数小于第二个稀疏矩阵行数

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

else

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

=M.tu)//只有M并且符合条件

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

while(q<

=N.tu)//只有N并且符合条件

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

++q;

Q.tu=k-1;

加法结果为:

print(Q);

//调用print()

returnOK;

=N.mu)//行数相等才能相减

Q.mu=M.mu;

Q.nu=N.nu;

if(M.data[p].v-N.data[q].v!

=0)//两个稀疏矩阵相减的结果不为0

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

++k;

if(M.data[p].col<

N.data[q].col)

//第一个稀疏矩阵列数小于第二个稀疏矩阵的列数

if(M.data[p].col>

//第一个稀疏矩阵列数大于第二个稀疏矩阵的列

Q.data[k].row=N.data[q].row;

Q.data[k].col=N.data[q].col;

Q.data[k].v=-N.data[q].v;

if(M.data[p].row<

++p;

if(M.data[p].row>

//第一个稀疏矩阵行列数大于第二个稀疏矩阵行数

Q.data[k].row=N.data[q].row;

Q.data[k].col=N.data[q].col;

Q.data[k].v=-N.data[q].v;

Q.data[k].row=N.data[q].row;

Q.data[k].col=N.data[q].col;

Q.data[k].v=-N.data[q].v;

减法结果为:

intarow,brow;

intp,q,tp,t;

intccol;

intctemp[maxrow+1];

//定义累加器

if(M.nu!

=N.mu)return;

Q.tu=0;

//Q初始化

if(M.tu*N.tu!

=0){//Q是非零矩阵

for(arow=1;

arow<

=M.mu;

arow++)

//处理M的每一行

for(p=1;

=Q.nu;

p++)//处理M的每一列

ctemp[p]=0;

//当前行各元素累加器清零

Q.rowtab[arow]=Q.tu+1;

if(arow<

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

elsetp=M.tu+1;

for(p=M.rowtab[arow];

tp;

++p)

//对当前行中每一个非零元

brow=M.data[p].col;

//找到对应元N中的行号

if(brow<

N.nu)t=N.rowtab[brow+1];

elset=N.tu+1;

for(q=N.rowtab[brow];

t;

++q)

ccol=N.data[q].col;

//乘积元素在Q中列数

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

}//求得Q中第crow(=arow)行的非零元

for(ccol=1;

ccol<

ccol++)

//压缩存储该行非零元

if(ctemp[ccol])

if(++Q.tu>

maxsize)return;

Q.data[Q.tu].row=arow;

//行数

Q.data[Q.tu].col=ccol;

Q.data[Q.tu].v=ctemp[ccol];

//累加非零元素值

乘法结果为:

//调用print()

charchoice;

rtripletableA,B,Q;

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

|*****欢迎使用稀疏矩阵运算器******|\n"

|=============================|\n"

\n|A、输入矩阵1|\n"

\n|B、输入矩阵2|\n"

\n|C、矩阵相加|\n"

\n|D、矩阵相减|\n"

\n|E、矩阵相乘|\n"

\n|F、退出本系统|\n"

\n|-----------------------------------------------|\n"

请选择所需要的操作功能(A,B,C,D,E,F):

do{

choice;

switch(choice){

case'

A'

:

creat(A);

break;

B'

creat(B);

C'

addsmatrix(A,B);

D'

subsmatrix(A,B);

E'

multsmatrix(A,B,Q);

F'

exit(0);

}cout<

}while

(1);

运行与测试

实验总结:

调试程序时,应注意矩阵的调用。

比如,开始时没有注意将程序调用!

尽管实现了矩阵的转置和相加,但没有符合题意。

在调试时,才意识到是以前经常发的一个错误,就是在最后加了一个return0,这是错误的!

在编写程序时体会到了团队合作的精神,这是将来走进社会不可缺少的!

实验成绩

学号

姓名

课题小组自评分数

最后得分

093821029

093821033

093821034

093821036

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

当前位置:首页 > PPT模板 > 商务科技

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

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