数据结构实践报告格式2.docx

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

数据结构实践报告格式2.docx

《数据结构实践报告格式2.docx》由会员分享,可在线阅读,更多相关《数据结构实践报告格式2.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构实践报告格式2.docx

数据结构实践报告格式2

苏州科技学院

电子与信息工程学院

《数据结构程序设计》报告

 

学号1032107204

姓名潘俊泽

班级1022

日期2011年7月

实践报告3

学号____1032107204______姓名__潘俊泽_________班级_______1022______

一、实验目的:

熟悉数据结构,培养良好的程序设计能力

二、实验内容:

管道铺设施工的最佳方案选择

三、设计说明:

写出数据结构的定义

四、连通网络可采用邻接矩阵存储,以顶点对(i,j)的形式输出最小生成树的边。

测试数据如教材p2图1.2(a)所示。

(难度系数为4)

五、功能说明:

说明本程序中的每一个函数及其功能。

管道铺设信息的输入;

最小生成树信息的输出;

功能模块图:

 

3.抽象数据类型分析

areanum居民区总数(顶点总数);

edgenum边的总数;

date[][20]邻接矩阵存储图结构;

s边的权值;

short-way[i]居民区i到目前生成树中所有点集U中某个居民区的路程最小值

near-area[i]U中能使其最小的居民区

1.全部流程

 

五、详细设计

1.算法分析

信息输入模块

//读入图的信息,并将邻接矩阵输出

Voidread()

{//输入顶点个数和边的条数

Printf(“请输入:

定点数,变数:

\n”);

Scanf(“%d,%d”,&areanum,&dedgenm);

//初始化邻接矩阵各元素值

Inti,j,k;

for(i=0;i

for(j=0;j

date[i][j]=INFINITY;

//读入边

Intfrom,to,s;

Printf(“输入边,格式为i,j,k,表示i到j的权值是k:

\n”);

For(i=0;i

{

Scanf(“%d,%d,%d”,&from,&to,&s);

date[from][to]=s;

date[to][from]st;

}

//输出邻接矩阵

for(i=0;i

{

for(j=0;j

Printf(“%d\t”,date[i][j]);

Printf(“\n”);

}

}

建立最小生成树并输出结果

//用普里姆算法从第u个顶点出发构造网G的最小生成树T,输出T的各条边

voidMiniSpanTree_PRIM(MGraphG,VertexTypeu)

{//system("cls");

inti,j,k;

minsideclosedge;

k=LocateVex(G,u);

for(j=0;j

{

if(j!

=k)

{

strcpy(closedge[j].adjvex,u);

closedge[j].lowcost=G.arcs[k][j].adj;

}

}

closedge[k].lowcost=0;//初始,U={u}

printf("最小代价生成树的各条边为:

\n");

for(i=1;i

{//选择其余G.vexnum-1个顶点

k=minimum(closedge,G);//求出T的下一个结点:

第K顶点

printf("(%s-%s)\n",closedge[k].adjvex,G.vexs[k]);//输出生成树的边

closedge[k].lowcost=0;//第K顶点并入U集

for(j=0;j

if(G.arcs[k][j].adj

{

//新顶点并入U集后重新选择最小边

strcpy(closedge[j].adjvex,G.vexs[k]);

closedge[j].lowcost=G.arcs[k][j].adj;

}

}

system("pause");

}

六、调试分析

内容包括:

(1)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析

(2)算法的时空分析和改进设想

(3)经验与体会等

通过数据结构的课程设计使我们对所学知识有了更好的理解,也增强了大家的动手能力。

同时也发现了自己的很多不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。

(4)程序的运行结果与理论推导结果完全吻合,即该算法与程序设计满足课程设计要求。

该程序的主要优点是简单易懂,不存在理解上的障碍,也很自然地能想到这种解法。

主要缺点是程序的变动性比较差—初始化邻接矩阵后结果就固定了。

如果能加入图行和图的修改、插入、删除等操作,我想应该会好很多

七、测试结果

包括输入和输出(粘贴输入输出界面,即用户屏幕)

 

八、带注释的源程序

 

实践报告4

学号___1032107204_______姓名__潘俊泽_________班级_____1022________

一、实验目的:

熟悉数据结构,培养良好的程序设计能力

二、实验内容:

堆排序

三、设计说明:

1、利用堆的特性对记录序列进行排序,

2、选一个关键字为最大的记录,

3、与序列中最后一个记录交换,

四、功能说明:

说明本程序中的每一个函数及其功能。

Print输入数据

Choose选择函数

Heapsort进行堆函数

Createsort建堆

五、调试分析

内容包括:

a)调试过程中遇到的问题是经常遇到自己看不懂的错误,无法解决,通过寻求同学的帮助,解决问题,提高自己的能力。

b)经验与体会等

通过数据结构的课程设计使我们对所学知识有了更好的理解,也增强了大家的动手能力。

同时也发现了自己的很多不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。

六、测试结果

七、带注释的源程序

#include

#include

#definemax100000

//函数声明

voidPrint(intheap[]);//输入函数

voidChoose(intchoice,intheap[]);//选择函数

voidHeapSort(intheap[],intlength);//进行堆函数

voidCreateHeap(intheap[],intlength);//创建堆函数

voidsift(intheap[],intk,intm);//假设二叉树

voidPrintHeap(intheap[],intlength);//输出排序后的函数

//主函数

intmain()

{

intheap[max];//定义最大值

system("colora");

Print(heap);//输入最大值

while(true)

{

printf("Pressentertocontinue.........");

getchar();

getchar();

system("cls");

Print(heap);

}

return0;

}

///////////////////////////////////////////////////////////////////////////////

//菜单函数

voidPrint(intheap[])

{

intchoice;

printf("---------------------\n");

printf("使用说明:

本程序可实现堆排序算法.\n");

printf("---------------------\n");

printf("1.输入一个新序列并进行最大堆排序.\n");

printf("2.输出当前堆的序列(顺序、逆序).\n");

printf("3.按其它任意键退出.\n");

printf("---------------------\n");

printf("请选择你要的操作:

");

scanf("%d",&choice);

Choose(choice,heap);

}

///////////////////////////////////////////////////////////////////////////////

//功能函数

voidChoose(intchoice,intheap[])

{

intn,i;

switch(choice)

{

case1:

printf("请输入序列的个数:

");

scanf("%d",&n);

printf("请依次输入将要进行堆排序排序的序列的元素:

\n");

for(i=1;i<=n;i++)

scanf("%d",&heap[i]);

heap[0]=n;

HeapSort(heap,n);

break;

case2:

printf("从小到大排序:

\n");

PrintHeap(heap,heap[0]);

break;

default:

exit(0);

}

}

///////////////////////////////////////////////////////////////////////////////

//输入一个新序列并进行最大堆排序函数

voidHeapSort(intheap[],intlength)

//对heap[1...n]进行堆排序,执行本算法后,heap中记录按关键字由小到大有序排列

{

inttemp;

inti,n;

CreateHeap(heap,length);

n=length;

for(i=n;i>=2;--i)

{

temp=heap[1];//将堆顶记录和堆中的最后一个记录互换

heap[1]=heap[i];

heap[i]=temp;

sift(heap,1,i-1);//进行调整,使heap[1...i-1]变成堆

}

}

voidCreateHeap(intheap[],intlength)

//对记录数组heap建堆,length为数组长度,length==heap[0]

{

inti;

intn;

n=length;

for(i=n/2;i>=1;--i)

sift(heap,i,n);

}

voidsift(intheap[],intk,intm)

//假设heap[k...m]是以heap[k]为根的完全二叉树且分别以heap[2k]和heap[2k+1]为根的

//左、右子树为大根堆,调整heap[k],使整个序列heap[k...m]满足堆的性质

{

inti,j,finished;

inttemp;

temp=heap[k];//暂存“根”记录heap[k]

i=k;

j=2*i;

finished=false;

while(j<=m&&!

finished)

{

if(j

//若存在右子树,且右子树根的关键字大,则沿右分支“筛选”

if(temp>=heap[j])finished=true;//筛选完毕

else

{

heap[i]=heap[j];

i=j;

j=2*i;

}//继续筛选

}

heap[i]=temp;//填入到恰当位置

}

voidPrintHeap(intheap[],intlength)

{

inti;

for(i=1;i<=length;i++)

printf("%d",heap[i]);

printf("\n");

注:

其他题目的报告以此类推。

文件命名采用学号姓名.doc形式,学号放前姓名放后,例如0720107116张琛.doc

 

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

当前位置:首页 > 求职职场 > 面试

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

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