当前位置:文档之家› 数据结构课程设计报告撰写要求

数据结构课程设计报告撰写要求

数据结构课程设计报告撰写要求(一)纸张与页面设置1.采用国际标准A4型打印纸或复印纸,纵向打印。

2.页边距:上3.5cm、下2.5cm、左边距3.0cm,右边距2.5cm。

3.页眉2.5cm、页脚1.8cm、对称页边距。

(二)页眉“沈阳航空工业学院课程设计报告”,五号楷体,居中。

(三)页脚标页码,五号宋体,居中。

(四)题目、摘要、关键词题目:小二号黑体,居中。

(五)标题一级标题,三号粗宋体,居中,用“1 ”、“2 ”、“3 ”…等表示序号。

二级标题,小三号粗宋体,左对齐,用“1.1”、“1.2”、“1.3”…等表示序号。

三级标题,四号粗宋体,左对齐,用“1.1.1”、“1.1.2”、“1.1.3”…等表示序号。

(六)正文小四号宋体,两端对齐,1.5倍行距。

(七)图、表1.表头包括:表标识及表名两部分,表头在表上,居中,用五号宋体字。

2.图头包括:图标识及图名两部分,图头在图下,居中,用五号宋体字。

(八)参考文献格式:[序号]作者.译者.书名.版本.出版社,出版时间(九)报告封页及模版见下页沈阳航空工业学院课程设计报告课程设计名称:数据结构课程设计课程设计题目:PRIM算法求最小生成树院(系):计算机学院专业:计算机科学与技术班级:7401102班学号:200704011030姓名:指导教师:郑志勇目录沈阳航空工业学院 ...................................................................................................... - 2 -1 需求分析 (1)1.1题目内容及要求 (1)1.2题目分析 (1)2 系统设计 (3)2.1数据结构设计 (3)2.2函数设计 (4)2.2.1系统流程 (5)图2.2.1 系统流程 (5)2.2.2 PRIM 函数流程 (5)2.2.3 Huitu函数流程 (6)2.2.4 GraphicVer函数输出邻接矩阵 (6)3 调试分析 (7)3.1调试初期 (7)3.2调试中期 (7)3.3调试后期 (9)4 测试及运行结果 (10)4.1欢迎界面 (10)4.2获取输入,绘制无向图 (10)4.3输出邻接矩阵 (13)4..4.演示PRIM算法生成最小生成树 (13)4.5用户退出 (14)参考文献 (15)附录(关键部分程序清单) (16)1 需求分析1.1 题目内容及要求以合适方便的方式输入一个带权值的无向图,采用合适的存储结构存储该无向图。

然后根据PRIM算法求该无向图的最小生成树并输出。

要求:1.输入无向图的方法尽量简单方便2.要能够形象方便地观察无向图的图形结构3.要能够形象地演示PRIM算法求最小生成树的过程1.2 题目分析刚拿到题目,乍看一下题目很简短,貌似很简单,但是细看之后就发现了很多隐藏在简短语句后的更深一层次的要求。

首先是“以合适方便的方式输入”,短短十个字就向你提出了两方面要求:首先是“输入”,即代表你最好可以得到一种通用的算法让你对一定范围内的数据进行运算后从而得到正确的结果;“合适方便”即提示你要从输入方便且有利于运算的输入数据的方法;采用合适的存储结构必然是本次课设当之无愧的重点,亦是此题目的第三方面要求;最后就是用PRIM算法求无向图的最小生成树。

PRIM算法在理解与实现方面不是很困难,但要求能够形象的演示该算法就不是那么简单了。

无论从算法角度,还是从输入方便、存储安全角度,数组都是此次课设的不二选择,即采用邻接矩阵的存储方式来存储无向带权图。

虽然邻接表的动态存储可以令该算法使用更大规模的数据并在一定范围内比数组更加节省空间并有更高的效率,但此次课设另一个重点就是演示算法而非真正的应用于实际问题,所以只需要较少的数据量来完成PRIM算法的演示即可。

故数组的便于操作及更加稳定、方便的优势便凸显出来。

在画图这个问题上,我曾一度找错了方向。

刚拿到题目时,我只是望文生义的认为我需要演示的是最小生成树一步一步的演示过程,这让我一度选择VC 6.0中的MFC来演示过程。

但后来,当我因为MFC当量调用WINDOWS的程序并有较多的头文件而焦头烂额的时候,重读课设要求的时候我才发现,过于注重细枝末节的我竟没有抓住此题目真正要求!“模拟PRIM算法最小生成树的过程”即是让你显示PRIM算法在更接近计算机可以理解的方式上显示其具体过程。

Turbo C 的超强的图像处理让我明白,它就是我这次课设的系统环境了。

2 系统设计2.1数据结构设计对于无向图的任何操作,无疑都必须依赖于数据的存储结构。

这里的存储结构不仅仅指的是数据在计算机中的物理内存,更多的是抽象程度更高的抽象数据结构。

图的存储结构主要有两种:邻接矩阵和邻接表。

邻接表以一个一维数组作表头节点存储图的顶点,然后利用表头引出所有以该点为箭尾的邻接边的信息;而邻接矩阵则是单独建立一个一维数组来存储顶点的信息,并以顶点的个数来建立一个相应的N阶对称矩阵,以二维数组存储单元来存储相应边的权值。

由于PRIM算法需要多次修改closeedge[ ]中的adjvex和lowcost 值,且此次数据规模较小,只需达到演示部分数据即可,所以统一采用数组的存储结构,即亦采用邻接矩阵的存储结构来存储无向带权图更利于实现及操作。

邻接矩阵的抽象数据结构定义:#define INFINITY INT_MAX //最大值#define MAX_ERTEX_NUM 20 //最大顶点数typedef enum {DG , DN , UDG , UDN }GraphKind;//{ 有向图,有向网,无向网,无向图}typedef struct Arc Cell{VRType adj ; // VRType 是顶点关系的类型。

对无权图,用1和0表示相邻否;对//带权图则为权值类型InfoType * info; //该弧相关信息的指针}ArcCell , AdjMatrix [ MAX_VERTEX_NUM][MAX_VERTEX_NUM];Typedef struct {VertexType vexs [ MAX_VERTEX_NUM] ; //顶点向量AdjMatrix arcs ; // 邻接矩阵int vexnum , arcnum ; //图的当前顶点数和弧数GraphKind kind ; // 图的种类标志}Mgraph ;2.2函数设计本系统所使用的函数见表2.2.1本系统所调用函数调用的关系见图2.2.2图2.2.2 本系统的函数调用关系2.2关键流程流程图能直观和系统地把主函数的各个执行步骤和调用的子函数以及调用先后表示出来,子函数中也有调用其他子函数的情况,画出子函数的流程图能清楚地看出子函数中各步语句的执行,下面是关于主函数流程和关键的子函数流程图的直观表示。

2.2.1系统流程图2.2.1 系统流程2.2.2 PRIM 函数流程表2.2.2 PRIM 函数流程2.2.3 Huitu函数流程表2.2.3 Huitu函数流程2.2.4 GraphicVer函数输出邻接矩阵图2.2.4 GraphicVer函数输出邻接矩阵3 调试分析3.1 调试初期由于编写的程序具有模块化的特性,且VC 6.0 的调试显然由于TC及个人对VC的熟练程度远优于TC等方面,我选择先在VC 6.0环境下完成除图形化演示算法过程函数的其他过程。

由于数据结构选择的较合理,且对PRIM算法理解的较为深刻,所以在此环境下的调试并没有太多困难,只是简单的笔误。

添加了画图函数后,我就不得不使用TC编程环境。

本人使用的是vista 系统,刚运行TC就发现提示:该操作系统不支持16 bit MS-DOS 系统。

上网查看帮助,安装了DOSBOX软件虚拟出DOS系统运行,才开始之后的调试。

3.2调试中期由于Turbo C 2.0 不支持鼠标,更没有剪切、粘贴等常用快捷的操作,且本人对计算机图形学、TC的图形函数了解甚少,本人电脑更是不兼容TC全屏模式,所以这段时期成为最让本人备受煎熬的时期。

首先,由于TC 操作复杂,更因为本人变成习惯不好,导致经常一运行就死机还没保存过的代码就又“恢复出厂化”,让所见之人无不扼腕惋惜,本人亦是痛心疾首,苦不堪言。

编译过程出现过的错误有把自定义函数的名字与TC 图形化函数其中一个的关键字相同,TC显示“该函数定义了多重特性”或“该函数数值过多”等类似提示的错误图3.2.1 初始化错误将自定义的initgraph函数重新命名为void huitu( ),即可排除此错误。

再次编译,又发现指针错误:图3.2.2 指针错误Outtextxy(int x ,int y ,*p),即要求最后一项为指向一字符串的指针。

数组就是指针,如果这里出错,那只应该是我定义的lowcose[ ]存储的数不是字符串。

所以我曾试图用strcpy()将数组内数据一一进行传拷贝到一指针,然后再调用outtextxy()。

但是结果依然错误!后来,在同学的帮助下,我终于弄明白是因为我数组内存储的是整数型数据,必然无法通过strcpy( )转换成指针。

后来,我改用vsprintf(tmp,"%d",&lowcost[vex-i]),即现将整型转化为字符串,此错误即可排除。

3.3 调试后期图3.3 连接错误这是经过多次修改后,最后一个编译错误。

该名定义是你所使用的视频显示模式,影响的是图形化后的屏幕像素及可支持的最大色彩。

经试验,此程序在另一台XP电脑上可编译成功,故本人认为是由于VISTA 的兼容性导致TC无法调用该定义,即使使用虚拟机也无法排除。

考虑到此语句对输出结果影响不大,故将此语句删除,即使得TC自动获取其他可用的视频模式。

编译成功!4 测试及运行结果4.1 欢迎界面运行程序,首先进入用户的欢迎界面。

模拟界面向导IRIS采用互动式的方法提示用户进入PRIM算法演示界面。

首先IRIS会先询问用户是否愿意看PRIM算法演示,若此时用户选择“y”,用户即可顺利进入模拟PRIM 的程序(见图4.1.1);图4.1.1 用户欢迎界面及正常进入算法演示界面否则,向导友情提示可以直接退出程序,其效果图见图4.1.2。

图4.1.2 用户选择退出算法演示的界面4.2获取输入,绘制无向图创建无向图,动态显示在屏幕上,并输出其存储结构,即无向网的邻接矩阵。

首先按照提示,收入先要创建顶点的坐标及其名。

其效果图见图4.2.1图4.2.2 动态建立无向图输入时需要注意的是,由于该程序时默认添加一点则连接相应的直线,所以在一点多线的时候,像例子中的A点,就要重新返回A后再连接其他点。

具体操作见图4.2.3。

相关主题