《数据结构》算法动态演示系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》算法动态
演示系统的设计与实现
朱继红 杜祝平
(计算机工程系)
摘 要 本文主要介绍了计算机辅助教学课件———《数据结构》算法动态
演示系统,详述了算法演示模块的实现技巧和课件应用的特点。
关键词 数据结构,算法,课件,CA I
分类号 TP39117
1 前言
90年代以来,随着多媒体和Internet 网络的出现,计算机教育已步入一个全新的阶段,计算机辅助教学CA I 作为一种先进的教学手段正逐步渗透于各类院校的各个学科。《数据结构》不仅是大学计算机专业的核心课程之一,也是非计算机专业的主要选修课程之一。该课程涉及大量的概念、数据结构和算法,理论性强又较为抽象,尤其是对算法描述的执行过程的理解是难点和重点。在课堂教学上,大量的算法不可能也无法一一详述。我们所制作的《数据结构》教学辅助系统,集数据结构、算法演示和其它信息(如输入提示等)于一屏,采用中文字幕显示,利用可视化图形来动态演示算法的执行过程,对学员深入理解教材内容、掌握基本的数据结构及相应算法的实现过程有很好的帮助作用,同时该系统可用于各种不同层次的教学,便于课上教员的讲解和课下学员的复习、自修。
2 设计思想
课件是教学内容和教学处理两大类信息的有机结合,其目的是按某种学习理论和教学策略将教学中的重点和难点,教学上不容易讲清楚的内容借助计算机演示。所以我们编制的CA I 系统在注重教学先进性、科学性的同时更强调实用性。本课件的开发满足以下原则:
(1)内容覆盖面宽 系统应覆盖该课程的主要内容,并结合课程选用教材,用C 语言来描述数据结构的算法。
收稿日期:1998209221
第一作者:女,1966年生,信息工程学院硕士研究生,讲师
第17卷第4期1998年12月 信息工程学院学报Journal of Information Engineering Institute Vol 117No 14Dec.1998
(2)功能实用化 为了能真正起到辅助教学的效果,系统使用多种演示手段如用单步跟踪、连续执行和跨越函数(或过程)调用等方式来演示算法的具体执行过程,且演示方式可随时更换;演示的速度可随时调节。
(3)人机交互界面友好性 系统界面设计遵循实用、方便的原则,各种操作简洁明了。课件同时具备鼠标接口和键盘接口,可接受来自于鼠标或键盘的输入;为了加深对算法的理解,允许用户通过输入不同的初始数据来观察算法的具体执行情况。
(4)中文字幕提示 系统演示插入了适当的说明及注释信息,以帮助系统使用者对演示过程的理解;为满足不同层次用户的需求,各种提示信息用中文给出。
(5)系统运行环境及可靠性 在保证系统功能的前提下,适当地降低了系统对运行环境的要求,以便系统可以在较低的配置系统软件环境中正常运行。对于各种有意或无意的错误操作及错误的输入数据,系统能正确处理,保证系统不会意外终止。3 系统组成实现
系统流程示意图(图1)、算法演示过程流程图(图2)如下
:
图1图2
311 主模块及其数据结构
本课件采用结构化编程,编写主界面模块来调用不同的演示模块。主界面为一级菜单,各章内容目录为二级菜单,演示简介界面为三级菜单,是选择演示模块的入口;对应于每一个演示模块,我们定义了公用的接口,每编写一新模块,只需简单连接到主界面模块即可。
接口结构定义如下:
每个可执行模块(演示模块或功能模块)独立存在,各个模块的入口函数存储在下面的指针数组中:
void (3proc [12][8](
)= {{nullpro ,nullpro ,…,nullpro ,nullpro},
—
22— 信息工程学院学报 1998年
{nullpro ,nullpro ,…,nullpro ,nullpro},
{sxb ,lb ,slb ,jtlb ,nullpro ,…,nullpro},
…,
{nullpro ,nullpro ,…,nullpro ,nullpro}}数组中元素代表某个可执行模块对应的入口地址,这些函数作为外部函数独立于其
它文件,在主模块中用“extern …”语句进行说明。其中如函数sxb (
)代表顺序表演示模块,函数1b (
)代表链表演示模块,函数slb ( )代表双链表演示模块,函数jtlb (
)代表静态表演示模块等;nullpro ( )为空函数,不代表任何具体操作,它的存在是为了填补数组中的空白。
调度某个模块时,只需要执行语句(3proc[i ][j ])(
)。当需要增加新模块时,将模块加入工程文件中,并将相应位置的nullpro 改写为模块的入口函数名,重新编译即可。312 算法演示子模块及实现
对一个具体的算法演示子模块,须满足单步执行,连续执行,跨越函数执行,速度可调,任意时刻复位并能重新执行等复杂切换控制功能,设计函数getchl 实现。在使用
中,只需简单地将if (getchl (
)=0)return -1;语句插入演示流程中的不同地方,就能达到上述要求;所有的算法演示均调用此函数完成,使编程统一、方便。313 图形屏幕的保存
在图形界面中有大量下拉式菜单和弹出式窗口出现,这些部件将挡住一部分屏幕,因而产生屏幕恢复问题,其常用方法是采用重画的方法或保存屏幕的方法;前者视觉效果较差,后者若直接调用TC 图形库中的函数完成则需大量的常规内存且调入调出图形块的大小受限制;经分析,标准V G A 有256K 显存,在640×16色模式下,一屏约150K 显存,其余显存则可用于保存屏幕,这种方法可不占常规内存,因此对系统性能无影响。我们用汇编语言编写了两个函数,在C 模块中被声明如下:
gettu (int x1,int y1,int x2,int y2,int offset );
puttu (int x1,int y1,int x2,int y2,int offset );
参数定义如下:
(1)x1,y1,x2,y2为保存的图片块
(2)offset 为保存到显存的偏移地址
这两个函数分别进行保存屏幕和恢复屏幕。在V G A 图形模式下显存起始地址被映射到主存地址0A0000H ,分为四个页面存储,每个页面占据相同的主存地址,大小为64K ,由于每个像素的每一位分别在不同的页面上,因此每8个像素占用了主存一字节的空间(4个页面共四个字节),已被占用的空间为6403480/8=38400,在显存偏移38400之后的空间即可用来存储图片。在程序中我们使用块移动指令将一部分显存内容从这一地址拷贝到另一地址,完成图象的保存和恢复。由于显存总线为32位,移动速度极快,因此我们编写的这两个程序不仅保存图片大,不占主存,速度快且视觉效果好(程序略)。
314 界面上文本字模的存储
文本显示包括两个方面:一方面是文本字模的存储,一方面是字符的显示方法。对—
32—第4期 朱继红等:《数据结构》算法动态演示系统的设计与实现