《《数据结构》中典型算法的动态演示毕业设计论文.doc》由会员分享,可在线阅读,更多相关《《数据结构》中典型算法的动态演示毕业设计论文.doc(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目 录中文摘要III英文摘要IV前言11 绪论21.1 问题背景21.2 开发环境21.3 开发工具简介21.3.1 C语言图形程序设计21.3.2 图形模式下的汉字显示51.3.3 Turboc(V2.0)编译错误信息61.4 其它相关工具软件71.4.1 Dos屏幕下程序截图工具介绍及Dos抓图技巧71.4.1 拓扑图制作工具亿图V1.6.372 需求分析82.1 问题定义82.1.1 问题分析82.1.2 用户目标82.2 系统的功能需求82.2.1 正确表达算法82.2.2 功能实用化82.2.3 具体演示功能82.3 系统的其他需求92.3.1 界面友好性92.3.2 系统的运行环境
2、及可靠性要求93 概要设计103.1 方案确定103.2 系统结构103.2.1 系统结构总框图103.2.2 模块功能说明113.2.3 算法演示子模块中要注意的问题114 详细设计124.1 数据设计124.2 系统主程序界面设计124.3 演示模块流程图124.3.1 冒泡演示流程图124.3.2 汉诺塔演示流程图144.3.3 二叉树演示流程图154.3.4 单链表演示流程图165 系统功能实现175.1 欢迎界面模块编码175.2 主程序模块编码195.3 冒泡排序模块编码225.4 汉诺塔模块编码245.5 二叉树遍历模块编码295.6 链表模块编码335.7 退出模块编码366
3、系统测试396.1 系统测试常用的测试方法396.2 测试范围与主要内容396.3 黑盒测试用例396.4 测试报告406.5 改进建议与措施40结束语41参考文献42致谢43数据结构中典型算法的动态演示计算机科学与技术专业 刘俊坤 指导老师:符开耀摘 要:数据结构作为计算机专业的一门综合性专业基础课,对后续课程的学习极其重要。但该课程涉及大量的概念、定义、模型和算法,显得很抽象和深奥。在教学过程中,如果能加以计算机辅助教学,可以提高教学效果,所以编写这样的程序不仅有助于学习数据结构,同时也大大增强了学生的学习兴趣,提高学生的编程能力。这是因为,一方面利用算法演示系统的生动性和直观性,使教学内
4、容条理化和形象化,降低了对知识理解的难度;另一方面,由于演示系统的趣味性和交互性,有利于激发学生浓厚的学习兴趣,使其愿学、乐学。 本系统以清华大学出版社出版的C语言版数据结构为蓝本,合理地选择数据结构中四个经典算法并在系统中进行有机地组合,形成优化的动态演示系统。 它可适应读者对算法的演示数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行过程中栈的变化状况。 可视化是演示系统应该具备的要求。本系统采用C语言图形编程技术来实现软件的可视化。因为C语言的图形编程对大多数人来说比较陌生,甚至让人误解C不能进行图形编程。通过本系统的
5、设计,让大家知道C语言也可以进行图形编程,从而进行可视化设计与开发。关键词:算法;动态演示;图形编程;可视化The dynamic demonstration of typical algorithm in the Data Structures Computer Science and Technology Liu Junkun Tutor:Fu KaiyaoAbstract:As one computer -specialized comprehensive basic course, the construction of data is extremely important to t
6、he following curriculum study. Because this curriculum involves massive concepts, definitions, models and operation algorithms, thus it seems very abstract and abstruse. In the teaching process, however,if itbe performed through computer- aided instruction, it mayimprove the teaching effect, therefo
7、re compiling such procedures can not only be helpful to the study of construction of data, but also greatly strengthen the students study interest, sharpen the students programming ability. This is because, on the one hand, algorithm demonstration systems vivid ness and direct-viewing, make the cont
8、ent in orderl and visual, reduce the knowledge itself difficulty degree; On the other hand , interest and the interaction as a result of the demonstration system,are advantageous to stimulate the students strong study interest, cause them to be willing to study .This system takes Qinghua University
9、publishing house publication C language version Construction of data as a main source, reasonably chooses four classical algorithms in the construction of data and carries on in the system organically combinations, forms the optimized dynamic demonstration system. It may adapt the readers different
10、demands to the algorithm data-in and control modes the process execution, and demonstrates in the algorithm implementation on the computer screen the data logical organization either the memory structure change condition or the stack change condition in the recursion algorithm implementation. Visual
11、ization demonstration system should be available. The system used C programming language graphics software technology to achieve the visualization. C programming language for graphics is unfamiliarto us,or we even mislead Cnot forgraphics programming . Through the design of this system, we know C pr
12、ogramming language can be graphic, and can carry out visible design. Keywords : Data structures; Dynamic demonstration; Graph programming; Visible43前 言 学习编写计算机程序设计仅仅了解计算机语言是不够的,还必须掌握数据组织、存储和运算的一般方法,这些都是数据结构研究的内容,也是我们进行计算机程序设计的重要基础。 由于数据结构的原理和算法比较抽象,因此要理解和掌握其中的原理就比较困难。本文通过对几个经典算法的研究,并进行动态演示,使得能更好地了解算
13、法的来龙去脉,更好地理解算法,抓住算法的本质,因而更好地学习数据结构这门课程。 本文的目的是将抽象算法转为形象的演示。本文从软件工程的角度出发,严格按照软件开发的基本步骤,开发了一个数据结构中几个典型算法的可视化演示系统,并给出了C语言实现各功能模块的思想及相关核心代码,充分体现了C语言知识的综合运用,特别是平时大家接触较少的图形编程。 由于编程水平有限以及时间仓促,故本系统难免有各种各样的不足,希望各位老师和朋友提出意见,在此衷心感谢! 1 绪论1.1 问题背景数据结构是一门比较难学的课程,在教学过程中,如果能加以计算机辅助教学,可以提高教学效果,所以编写这样的程序不仅有助于学习数据结构,同
14、时也大大增强了学生的学习兴趣,提高学生的编程能力。由于数据结构的原理和算法比较抽象,因此要理解和掌握其中的原理就比较困难。本系统通过对几个经典的算法进行动态演示,让人能更好地了解算法的来龙去脉,更好地理解算法,抓住算法的本质,从而更好地学习数据结构这门课程。1.2 开发环境 开发环境:TurboC(V2.0) 运行环境:Windows98/2000/XP/DOS系列平台1.3 开发工具简介 1.3.1 C语言图形程序设计 计算机图形程序设计是程序设计中比较困难而且又吸引人的部分。为了方便用户设计图形程序,不同版本的C语言编译程序提供了许多图形的库函数。用户在设计图形程序时,只需要调用相应的库函
15、数即可。在ANSI C中没有对图形库函数的要求,各版本的C语言编译环境图形库函数都不相同,下面以Turboc 2.0的图形库来介绍图形程序设计2。 Turboc 2.0为用户提供了一个功能很强的图形函数库,又称为Borland 图形接口(BGI)。编写图形程序时用到的一些图形库函数均包括在graphics.lib中。用到这些函数时,必须把图形头文件graphics.h包含进来6。 计算机显示器的显示模式按功能可以分为字符模式和图形模式两大类。因此要进行图形编程,首先要对图形模式进行初始化。不同的显示器适配器有不同的图形分辨率。即使是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图
16、之前,必须根据显示器适配器的种类将显示器设置成为某种图形模式。在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。 设置屏幕为图形模式,可用下列图形初始化函数: void far initgraph (int far* gdriver,int far *gmode,char *path); 其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。图形驱动程序由Turbo C出版商提供,文件扩展名为BGI。根据不同的图形适配器有不同的图形驱动程序。例如对于EGA、VGA图形适配器的图形驱动程序为EGAVG
17、A.BGI。 有时编程者并不知道所用的图形显示器适配器种类,而且我们为了将编写的程序可以用于不同图形驱动器,增强程序的通用性,我们通常不指定图形显示器适配器种类,而使用Turbo C提供了一个自动检测显示器硬件的函数,其调用格式为:void far detectgraph ( int *gdriver, *gmode);例1:自动进行硬件测试后进行图形初始化2 #include graphics.h main( ) int gdriver, gmode; detectgraph(&gdriver, &gmode); /*自动测试硬件*/ printf(driver is %d, mode is
18、 %dn, gdriver,gmode); /*输出结果*/ getch(); initgraph(&gdriver, &gmode, ); /* 根据测试结果初始化图形*/ circle(320,240,50); getch(); closegraph(); 上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置。其中,closegraph()为退出图形状态的函数,其调用格式为:voidfarclosegraph(void);调用该函数后可退出图形状态而进入文本方式,并释放用于保存图形驱动程序和字体的系统内存。同时TurboC提供了一种更简单的初始化图形的方法,即用gdriv
19、er=DETECT语句后再跟initgraph()函数就行了。比如,上例可改为如例2的情形2。例2:对例1的修改 #include graphics.h main() int gdriver=DETECT, gmode; initgraph(&gdriver, &gmode, ); circle(320,240,50); getch(); closegraph(); 对图形模式进行了初始化后,接下来要进行的工作是对于图形模式的屏幕颜色设置以及如何清屏。对于图形模式的屏幕颜色设置,分为背景色的设置和前景色的设置。在Turbo c中分别使用以下两个函数:n 背景色设置函数:void far set
20、bkcolor (int color); 该函数将使背景按照参数color指定的颜色来进行显示。n 前景色设置函数:void far setcolor (int color); 该函数将使前景按照参数color指定的颜色来进行显示。清除图形屏幕内容使用清屏函数,其调用格式如下void far cleardevice(void);该函数清除整个屏幕的内容,可以在绘图前调用这个函数进行清屏或者在画新图形时调用该函数清除以前画的图形。有关颜色设置、清屏函数的使用请看例3的示例2。例3:清屏函数的使用 #include stdio.h #include graphics.h main() int gd
21、river, gmode, i,j; gdriver=DETECT; initgraph(&gdriver, &gmode, ); /*图形初始化*/ setbkcolor(0); /*设置图形背景*/ cleardevice(); setcolor(1); /*设置不同作图色*/ circle(319, 239, 20); /*画圆*/ setbkcolor(1); /*设置不同背景色*/ cleardevice(); getch(); closegraph(); 另外,TURBOC也提供了几个获得现行颜色设置情况的函数。n int far getbkcolor(void); 返回现行背景颜
22、色值。n int far getcolor(void); 返回现行作图颜色值。n int far getmaxcolor(void); 返回最高可用的颜色值。接下来介绍一些基本的图形函数:n 画点函数:void far putpixel(int x, int y, int color);n 画线函数:Turboc提供了一系列画线函数,下面介绍其中最常用的一种:void far line(int x0, int y0, int x1, int y1); 画(x0, y0)到(x1, y1)的直线。n 图形填充函数:void far setfillstyle(int pattern, int co
23、lor); color的值是当前屏幕图形模式时颜色的有效值。 n 图形模式下的文本输出函数:void far outtextxy(int x, int y, char far *textstring);该函数输出字符串指针textstring所指的文本在规定的(x, y)位置。其中x和y为象元坐标。1.3.2 图形模式下的汉字显示在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。在图形模式下显示汉字就稍稍麻烦些。我们可以定义一个函数来用于汉字的显示
24、。这个函数不需要汉字系统的支持,但用到其中的字库文件2。下面我看一个例子是如何实现汉字显示的。例4:图形模式下16点阵汉字的显示void HZ16(int x0,int y0,int w,int color,char *s)/*横坐标,纵坐标,字间隔,汉字颜色,汉字字符串*/ FILE *fp; register char buffer32; register char str2; unsigned long fpos;/*fpos为最终偏移动量*/ register int i,j,k; fp=fopen(hzk16,r);/*打开16*16汉字库*/ while(*s)/*一直到字符串结束
25、为止*/ if(*s0)/*汉字输出*/ str0=(*s)-0xa0; str1=*(s+1)-0xa0; fpos=(str0-1)*94+(str1-1)*32L;/*计算汉字在hzk16的偏移量*/ fseek(fp,fpos,SEEK_SET);/*指针移动到当前位置*/ fread(buffer,32,1,fp);/*读取一个汉字到数组中*/ for(i=0;i16;i+)/*16行*/ for(j=0;j2;j+)/*两个字节*/ for(k=0;k(7-k)&0x1)!=NULL)/*是一就画点*/ putpixel(x0+8*j+k,y0+i,color); s+=2;/*一
26、个汉字占两个字节,现在将指针移动两个字节*/ x0+=w;/*显示坐标也按照间隔移动*/ else/*显示非汉字字符*/ settextstyle(0,0,1); setcolor(color); str0=*s;str1=0; outtextxy(x0,y0+7,str);/*显示单个字符*/ x0+=w-7;/*显示单个字符后的x坐标变化*/ s+;/*指针移动到下一个字节*/ fclose(fp);/* 关闭16*16汉字库*/ 1.3.3 Turboc(V2.0)编译错误信息 为了帮助读者调试程序和分析程序,下面简单介绍程序出错的种类1。Turboc(V2.0)的源程序错误分为三种类型
27、:致命错误、一般错误和警告。其中,致命错误通常是内部编译出错;一般错误指程序的语法错误、磁盘或内存存取错误或命令行错误等;警告则只是指出一些得怀疑的情况,它并不防止编译的进行。下面按字母顺序AZ分别列出致命错误及一般错误信息,英汉对照及处理方法:(1)致命错误英汉对照及处理方法:A-B致命错误Bad call of in-line function (内部函数非法调用)分析与处理:在使用一个宏定义的内部函数时,没能正确调用。一个内部函数以两个下划线(_)开始和结束。Irreducable expression tree (不可约表达式树)分析与处理:这种错误指的是文件行中的表达式太复杂,使得代
28、码生成程序无法为它生成代码。这种表达式必须避免使用。Register allocation failure (存储器分配失败)分析与处理:这种错误指的是文件行中的表达式太复杂,代码生成程序无发把它生成代码。此时应简化这种繁杂的表达式或干脆避免使用它。(2)一般错误信息英汉照及处理方法详见参考文献11.4 其它相关工具软件1.4.1 Dos屏幕下程序截图工具介绍及Dos抓图技巧现在的抓图软件基本上都只能在Windows 下运行,可有时候我们还需要在纯DOS 下(注意:不是Windows 中的DOS 模式)进行屏幕抓取工作。可以通过安装虚拟机来解决这个问题,但是很麻烦,怎么办呢?下面介绍一个工具G
29、raffix,帮你完成纯DOS下的截图任务。用Graffix 完成抓图操作一般情况下都要分成两个主要步骤:先将屏幕捕捉AT格式然后用附带的转换工具将ATF 格式转换为GIF 或者PCX 图像格式。(1)ATF 文件的获得进入纯DOS 后,在命令行后输入“DGFX”并回车,将出现用法提示(图1),可以看到抓取热键是“C t r l + A L T空格键”。从内存卸载此程序的命令是“DGFX/U”。运行需要抓图的程序,出现待抓画面后,按下热键,屏幕弹出提示(图2 ),输入文件名后按F1 键可以将画面抓取为A T F 格式,如果直接按E n t e r 键,则得到的是TXT 文本格式。(2)将ATF
30、 转换为GIF/PCX 图像格式ATF 格式的图片不能被Windows 下应用程序所识别,因此我们需要将前面抓取到的ATF 格式转换为GIF 或者PCX 格式。在DOS 提示符后输入“A2B”,回车,输入ATF 文件名,之后在屏幕上会显示该ATF 文件的内容。再次按下热键“CTRL+ALT+ 空格”,会出现“SAVE IN WHICH FORMATGIF OR PCX(G/P)”的提示(询问你是将文件保存为GIF 还是PCX 格式),此时若按下字母G,则通过下面的步骤会将ATF 转换为GIF 格式;如按字母“P”则可得到PCX 格式。输入最终要得到的文件的主文件名并回车。现在进入软件目录看看,
31、是不是得到所需要的GIF 或PCX 图像文件了?若要抓取的程序画面本身是图形模式,则将直接得到GIF 或PCX 图像格式的文件,从而可以省略转换步骤。1.4.1 拓扑图制作工具亿图V1.6.3 亿图是一款类似Visio的流程图、网络图绘制软件,新颖小巧,功能强大,可以很方便的绘制各种专业的业务流程图,程序流程图,数据流程图,网络拓扑图等。它在设计时采用全拖曳式操作,最大限度的简化用户的工作量,方便易用;提供各种图形模板库,方便专业人士的使用;提供强大的图文混排和所见即所得的图形打印。 2 需求分析2.1 问题定义2.1.1 问题分析本系统要完成的工作是通过对数据结构中经典算法的模拟,经用户输入
32、数据和对数据处理后最终以图形的方式实时显示在屏幕上,从而使得抽象的算法形象化、生动化。用户通过使用这个动态的演示软件就能很好的理解算法的含义。2.1.2 用户目标 本系统可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行过程中栈的变化状况。整个系统使用键盘操作和菜单驱动方式。每个菜单项对应一个动作或一个子菜单。系统一直处于选择菜单项或执行动作状态, 直到选择了退出动作为止。用户的目标也就是该演示系统所希望达到的目的。2.2 系统的功能需求 系统的功能需求也即是本系统要实现的具体内容。算法演示系统要求能够
33、动态演示数据结构中的算法的执行过程。用户可以自由选择演示的算法,且在执行某一个特定算法操作演示前提示用户输入操作元素及操作方法。由于时间有限而要演示的算法很多,故这里我以几个经典算法为例子,实现它们的动态演示并掌握这种方法,起到抛砖引玉的作用,希望大家能够不断完善这个系统。本系统要演示的内容包括四个经典算法:冒泡排序、汉诺塔的递归算法、单链表建立和二叉树的建立与遍历,由主界面菜单显示。 2.2.1 正确表达算法这是最基本的一项要求,算法演示的目的本来就是让大家更好地学习理解算法,演示只是一种手段,目的是降低知识难度,传递知识,因此首先得保证知识的正确性。2.2.2 功能实用化 为了真正起到深入
34、理解算法的效果,系统使用多种演示手段如单步跟踪和连续执行等多种调用方式来演示算法的执行过程。为了针对用户的各种需要,演示的速度可以由用户自己调节。2.2.3 具体演示功能A. 冒泡排序算法 选择系统自动产生随机数据和手动输入数据两种方式; 选择自动排序和手动单步排序两种方式 ; 屏幕上显示算法执行过程并输出所有排序序列。B. 汉诺塔递归算法 任意输入演示的个数; 选择电脑自动演示和手动单步执行两种方式; 若选择电脑自动演示请输入速度; 屏幕上显示算法执行过程。C. 单链表 自由输入接点数据; 屏幕上显示算法执行过程并输出单链表。D. 二叉树算法 选择系统自动产生随机二叉树和手动输入数据产生两种
35、方式; 选择电脑自动演示和手动单步执行两种方式; 屏幕上显示算法执行过程并输出三种遍历序列。2.3 系统的其他需求2.3.1 界面友好性系统界面设计遵循实用、方便的原则,各种操作简单明了。系统具备键盘接口,接受键盘输入。为了加深对算法的理解,可允许用户通过输入不同的初始数据来观察算法的具体的执行情况。系统演示插入了适当的说明和注释信息,以帮助使用者对演示过程的理解,为满足各种不同层次用户的要求,各种提示信息用中文方式。2.3.2 系统的运行环境及可靠性要求在保证了系统功能的前提下,适当降低了对系统运行环境的要求,以便系统可以在配置较低的软件环境中运行。对各种有意或无意的误操作,系统能正确处理,
36、不会自动中止。 3 概要设计3.1 方案确定本系统要求实现几种不同算法的演示功能,故可遵循结构化程序设计思想来进行本系统的设计-自顶向下,逐步求精,将设计任务划分成许多子任务,即分解成多子功能模块进行设计。本系统采用结构化编程,编写主模块来调用不同的演示模块。主模块的菜单是选择演示模块的入口。对每一个演示模块,系统定义了公用的接口,每编写一个新模块,只需要连接到主界面模块即可。调用某个模块时,只需要执行语句 system();括号里面加入模块函数名。当需要加入新模块时,将程序加入到系统文件中,编译即可3。3.2 系统结构3.2.1 系统结构总框图软件系统的结构如图3-1所示。有了系统总体结构图
37、,我们就可以逐个模块的详细设计,直至所有的模块完全实现。为了增强系统的维护性和可扩充性,总框图中的各个模块基本是相互独立的,用户只需通过键盘即可方便地进入各个模块,实现不同模块的跳转。图3-1 数据结构算法动态演示系统结构总框图3.2.2 模块功能说明对本系统的功能进行分析后可做如下的模块化设计:主程序模块实现的功能:完成选项菜单的显示,及对各模块的调用。欢迎界面模块实现的功能:完成对系统的初始化及界面显示。冒泡排序模块实现的功能:完成冒泡算法的演示。汉诺塔模块实现的功能:完成汉诺塔算法的演示。 二叉树遍历模块实现的功能:完成二叉树遍历算法的演示。 链表模块实现的功能:完成单链表建立算法的演示
38、。 系统介绍的模块:对系统简单的介绍。 退出界面模块:退出图形模式,关闭系统。3.2.3 算法演示子模块中要注意的问题 对一个具体的算法演示子模块,须满足单步执行,连续执行,速度可调,任意时刻复位等复杂功能,设计一个接收键盘输入的字符函数7 实现。在使用中,只需要简单把接收键盘输入的字符函数语句插入演示流程的不同地方,就能达到上述要求。调速的话还要用到延迟函数,还有系统自动产生演示数据的话需要使用随机数发生函数,所有的算法演示均调用此类函数完成,使编程统一,方便。 4 详细设计4.1 数据设计 本系统的设计以数组和结构体为基类型,其他数据类型相辅来完成。在数据选择和输入方面,系统提供两种方式:
39、一是系统自动随机产生,二是用户手动输入数据并支持自动执行和单步操作。4.2 系统主程序界面设计欢迎界面:雪花飞舞,标题汉字显示并闪烁,颜色循环改变,显示系统开发人员信息。系统介绍:系统简单介绍。菜单界面:提供选择要演示的内容。退出界面:星空灿烂,标题汉字显示并闪烁,颜色循环改变,并在一次循环之后退出系统。4.3 演示模块流程图 4.3.1 冒泡演示流程图 由于冒泡排序这个算法我们已经非常熟悉,因此在这里具体排序算法不是我们关心的问题,我们要关心的是怎么样将它的排序过程动态地演示出来。该演示算法的基本思想是:用户进入程序后,可选择系统随机产生待排序的数据或者是自己手动输入数据(当然不能超过个数限
40、制,否则超出部分会无效);然后用户还可以选择系统自动排序或者是手动单步执行排序,这两种方式的区别在于选择了前者排序将自动进行直到结束,而选择后者的话每进行完一趟排序程序暂停,等待用户按任意键继续执行下一趟排序,直到全部排序结束退出。 由图4-1可知,此冒泡排序算法演示分以下几个步骤:1 用户进入程序后,选择产生演示数据的方式;2 用户选择演示方式;3 演示完毕退出。由此,该算法要设置三个标志变量,分别用来判断数据产生方式、排序演示方式和排序是否完成。冒泡排序的基本原理是对存放原始数据的数组,按从前往后的方向进行多次扫描,每次扫描称为一趟。当发现相邻两个数据的次序与排序要求的大小次序不符合时,即
41、将这两个数据进行互换。这样,较小的数据就会逐个向前移动,好像气泡向上浮起一样。此演示流程中将每一趟排序后的数据都显示在屏幕上,通过每一趟的数据对比,让人容易理解排序过程中数据怎么一步一步交换的,数据是怎么样变成有序的。当然具体的数据动态交换过程我们会在系统功能实现这一章中详细介绍,这里只谈整个演示的流程。该演示算法流程图如图4-1。图4-1 冒泡算法演示流程4.3.2 汉诺塔演示流程图这里我们主要关心的是汉诺塔的移盘过程。该演示程序的思想是:用户在进入程序后,先输入想要演示的盘子个数,然后再选择是否自动演示,若选择自动演示的话,输入演示速度;若是手动执行的话,移盘一次程序暂停一下,然后按任意键
42、继续执行直到完成。该演示算法流程图如图4-2。图4-2 汉诺塔演示流程4.3.3 二叉树演示流程图该演示程序的思想是:用户在运行程序后,可选择系统随机生成二叉树或者手动产生,若是手动的话用户自己输入结点数值;然后用户可以选择系统自动和手动两种遍历方式 。这两种方式的区别在于选择了前者遍历将自动进行直到结束并在屏幕上显示遍历序列,而选择后者的话每遍历一个结点暂停,等待用户按任意键继续执行,直到全部结点遍历完毕。该演示算法流程图如图4-3。图4-3 二叉树演示流程4.3.4 单链表演示流程图该演示的思想是:程序一运行便进入图形模式,随之对链表进行一系列的初始化,然后用户输入接点字符,程序接收后在屏
43、幕上生成一个单链表结点,如果输入ESC字符的话,停止生成结点,链表建立完成,或者结点数超过限制也将停止建立结点。该算法流程图如图4-4。图4-4 单链表演示流程 5 系统功能实现5.1 欢迎界面模块编码本系统的欢迎界面是一个雪花飞舞的场景,系统标题和作者信息在场景中不断闪烁变色。关键技术:画雪景、让字循环变色模块实现步骤:、定义雪花的结构及其一些基本参数 、保存雪花 、画雪花 、让字闪烁并循环变色核心代码实现如下:n 定义雪花的结构及其一些基本参数 struct Snow/*雪花的一些参数*/ int x; int y; int speed;/*雪花的速度*/snow100;n 实现对雪花的保存首先定义两个指针变量来作为保存空间:void *save1,*save2;/*保存空间*/然后我们通过定义一个函数来申请空间,具体实现对雪花的保存。void Copy(void)/*保存区域*/ setcolor(0); setfillstyle(SOLID_FILL,15); fillellipse(200,200,4,4); size=imagesize(196,196,204,204);/*定义保存图象区域大小*/ save1=malloc(size);/*申请空间*/ save2=malloc(si
限制150内