数据结构实验Word格式文档下载.docx

上传人:b****6 文档编号:20853606 上传时间:2023-01-26 格式:DOCX 页数:16 大小:25.88KB
下载 相关 举报
数据结构实验Word格式文档下载.docx_第1页
第1页 / 共16页
数据结构实验Word格式文档下载.docx_第2页
第2页 / 共16页
数据结构实验Word格式文档下载.docx_第3页
第3页 / 共16页
数据结构实验Word格式文档下载.docx_第4页
第4页 / 共16页
数据结构实验Word格式文档下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构实验Word格式文档下载.docx

《数据结构实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构实验Word格式文档下载.docx

操作结果:

建立三元列表b,并想稀疏矩阵内输入数据

addmtirx(&

a,&

b,&

c);

初始条件:

存在两个不为空稀疏矩阵和一个空的三元列表

操作结果:

将两个稀疏矩阵相加,并将得数存储在c中

transposesmatrix(&

a,&

b);

初始条件:

存在一个不为空稀疏矩阵和一个空的三元列表

将含有数据的稀疏矩阵转置,并将得数存储在b中

multmatrix(&

b,&

将两个稀疏矩阵相乘,并将得数存储在c中

submtirx(&

c)

将两个稀疏矩阵相加减,并将得数存储在c中

Output()

存放稀疏矩阵三元列表存在

输出计算后的稀疏矩阵

2.本程序包含三个模块:

(1)主程序模块;

(2)输入需要计算的稀疏矩阵

(3)选择计算方法,并计算

(4)输出计算后的矩阵

(5)模块调用图:

主程序模块

输入需要计算的稀疏矩阵

选择计算方法,并计算

输出计算后的矩阵

4详细设计

1.元素类型,列表类型和指针类型:

#include<

stdio.h>

#include<

stdlib.h>

#definemaxsize100

typedefintdatatype;

typedefstruct//定义三元组

{

inti,j;

datatypex;

}matrix;

typedefstruct//定义三元组表

matrixdata[maxsize];

intmu,nu,tu;

//矩阵行,列,非零元个数

}tripulematrix;

2.每个模块的分析:

(1)主程序模块:

voidmain()

printf("

----------------矩阵计算---------------\n"

);

请选择你需要的计算方式\n"

-----------------1.稀疏矩阵的转置---------------\n"

-----------------2.稀疏矩阵的加法---------------\n"

-----------------3.稀疏矩阵的减法---------------\n"

-----------------4.稀疏矩阵的乘法---------------\n"

-----------------5.退出---------------\n"

charx;

scanf("

%c"

&

x);

tripulematrixa,b,c;

switch(x)

{

case'

1'

:

//tripulematrixa,b;

printf("

请输入矩阵的行数与列数\n"

scanf("

%d%d"

a.mu,&

a.nu);

b.mu=a.mu;

b.nu=a.nu;

printf("

请输入一个矩阵,例如:

\n"

123\n234\n456\n"

请输入\n"

input(&

a);

transposesmatrix(&

output(&

break;

case'

2'

//tripulematrixa,b,c;

请输入两个矩阵,例如:

请输入第一个矩阵\n"

请输入第二个矩阵\n"

addmtirx(&

3'

//tripulematrixa,b,c;

;

scanf("

b.mu=a.mu;

b.nu=a.nu;

printf("

input(&

submtirx(&

break;

4'

multmatrix(&

break;

5'

exit(0);

system("

pause"

}

(2)输入数据

voidinput(tripulematrix*a)

inti,j,k=0;

for(i=0;

i<

a->

mu;

i++)

for(j=0;

j<

nu;

j++)

{

%d"

if(x)//如果是非零元

{

a->

data[k].i=i;

data[k].j=j;

a->

data[k].x=x;

k++;

}

}

a->

tu=k;

}//input

(3)加法

datatypeaddmtirx(tripulematrix*a,tripulematrix*b,tripulematrix*c)

intk=0,l=0;

c->

mu=a->

nu=a->

tu=0;

while(k<

tu&

&

l<

b->

tu)

if((a->

data[k].i==b->

data[l].i)&

(a->

data[k].j==b->

data[l].j))

inttemp=a->

data[k].x+b->

data[l].x;

if(temp!

=0)

c->

data[c->

tu].x=a->

tu].i=a->

data[k].i;

c->

tu].j=a->

data[k].j;

tu++;

k++;

l++;

else

data[k].j<

data[k].x;

k++;

else

if(((a->

data[k].j>

data[l].j))||(a->

data[k].i>

data[l].i))

tu].i=b->

data[l].i;

c->

tu].j=b->

data[l].j;

tu].x=b->

l++;

while(k<

while(l<

l++;

return

(1);

}

(4)减法

datatypesubmtirx(tripulematrix*a,tripulematrix*b,tripulematrix*c)//减法

//inttemp=a->

data[k].x-b->

//if(temp!

//{

//}

if((a->

data[l].j)||(a->

data[k].i<

else

if(((a->

{

c->

tu].x=-b->

l++;

}

while(k<

c->

while(l<

l++;

(5)转置

inttransposemartix(tripulematrix*a,tripulematrix*b)

intcol,p,q;

b->

tu=a->

tu;

if(b->

q=0;

for(col=0;

col<

col++)

for(p=0;

p<

p++)

if(a->

data[p].j==col)

b->

data[p].i=a->

data[q].j;

data[p].j=a->

data[q].i;

data[p].x=a->

data[q].x;

q++;

}//稀疏矩阵的转置算法

(六)乘法intmultmatrix(tripulematrix*a,tripulematrix*b,tripulematrix*c)

intrpos1[maxsize],rpos2[maxsize],num[maxsize],rpos3[maxsize];

introw1,row2,arow,tp,t,brow,ccol,p,q,k;

intctemp[maxsize];

if(a->

for(row1=0;

row1<

row1++)

num[row1]=0;

for(row1=0;

row1++)

++num[a->

data[row1].i];

rpos1[0]=0;

for(row1=1;

rpos1[row1]=rpos1[row1-1]+num[row1-1];

if(b->

for(row2=0;

row2<

row2++)

num[row2]=0;

for(row2=0;

row2++)++num[b->

data[row2].i];

rpos2[0]=0;

for(row2=1;

row2++)rpos2[row2]=rpos2[row2-1]+num[row2-1];

c->

nu=b->

if(a->

tu*b->

tu!

for(arow=0;

arow<

arow++)

for(k=0;

k<

maxsize;

k++)ctemp[k]=0;

rpos3[arow]=c->

tu+1;

if(arow<

mu-1)

tp=rpos1[arow+1];

tp=a->

for(p=rpos1[arow];

tp;

brow=a->

data[p].j;

//找到对应元在b中的行号

if(brow<

nu-1)

t=rpos2[brow+1];

elset=b->

for(q=rpos2[brow];

q<

t;

q++)

ccol=b->

//乘积元素在Q中的列号

ctemp[ccol]+=(a->

data[p].x)*(b->

data[q].x);

for(ccol=0;

ccol<

ccol++)

if(ctemp[ccol])

if(c->

tu>

maxsize)

return0;

tu].i=arow;

tu].j=ccol;

tu].x=ctemp[ccol];

return1;

(4)函数调用关系图

main()

input(&

submtirx(&

output();

5程序使用说明及测试结果

1.程序使用说明

(1)本程序的运行环境为VC6.0。

(2)进入演示程序后即显示提示信息:

----------------矩阵计算---------------

请选择你需要的计算方式

-----------------1.稀疏矩阵的转置---------------

-----------------2.稀疏矩阵的加法---------------

-----------------3.稀疏矩阵的减法---------------

-----------------4.稀疏矩阵的乘法---------------

-----------------5.退出---------------

1

请输入矩阵的行数与列数

33

123

111

得出:

211

311

请按任意键继续...

3.调试中的错误及解决办法。

(1)转置出现问题

(2)输出时无法利用数组第一个空间

(3)三元表定义是无rpos(每行第一个非零元位置)

解决方式:

逐步调试,以及问同学,自己更改算法,计算出rpos

6致谢

经过1个月的忙碌和努力,此次论文设计也将基本完成。

作为一个本科生的论文,由于我自身经验的匮乏及学识所限,不可避免仍有许多疏忽错漏的细节。

如果没有导师的督促指点,以及一起研究的同学们的支持和鼓励,完成这次毕业设计就将是愚公移山,断不可行。

在此次论文写作过程中,老师对我的亲切关怀和耐心指导尤其激励着我。

她恭肃的学术态度,严谨的治学精神,认真专注的工作作风,给我留下深刻的印象并成为我今后学习生活的目标。

从最初的选择课题到最终完成论文,老师都始终非常耐心的指导和帮助我。

衷心感谢各位老师在百忙中评阅本论文,并提出了宝贵意见。

本文引用了数位学者的研究文献,正是各位学者的研究成果才启发我完成了本篇论文的写作。

由于我的个人水平局限,这篇论文难免有不足之处,恳请各位老师批评指正!

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

当前位置:首页 > PPT模板 > 其它模板

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

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