“数据结构”教学与教材研究
摘 要:本文回顾了著者三十多年来从事“数据结构”教学与研究的主要经历,重点介绍了对该课程的教材建设方面的主要工作,指出与时俱进、精益求精地编写教材是提高教学水平的基础和关键。
【关键词】:^p :数据结构;算法;程序设计语言;程序设计方法;教材
一、前言
194年2月14日,世界上第一台电子数字计算机ENIAC在美国宾夕法尼亚大学诞生。早期计算机主要用于数值计算,处理的对象是“无结构”的数据(例如整数和浮点数),它们和处理这些数据的程序(根据计算机指令系统编写的代码)都采用二进制表示形式存储在计算机的存储器中。20世纪50年代开始的“程序设计语言”研究,改变了原始的使用机器语言编程的方式,语言的“使用手册”给计算机的使用者提供了一个非常高级的“虚拟机”,使得程序员可以方便快捷地描述需要的数据和处理数据的程序;然后通过语言的“编译器”把它们成功地转换为计算机内部的二进制代码。高级语言的研究成果,打破了计算机只能进行科学计算的限制。“语言编译系
统”通过计算机成功地完成从高级语言的模型到计算机硬件语言模型的转换,打开了计算机系统软件研究的大门;同时也提出许多相对比较复杂的结构化数据的需求(例如栈、散列表和二叉树等),促进了数据结构的研究和发展。
“数据结构”的概念最早是由C.A.R.Hoare和N.Wirth在196年提出。大量关于程序设计理论的研究表明:为了系统而科学地构造大型复杂的程序,必须对这些程序中所包含的数据结构进行深入的研究。
1968年,美国教授D.E.Knuth在他的名著《计算机程序设计技巧》(第1卷 基本算法 第二章信息结构)中首次系统地研究并整理了当时经常使用的主要数据结构与相关的算法,为数据结构课程的开设提供了丰富的素材(他本人也因此书的成就,在1974年获得计算机界最高科学成就奖“图灵奖”)。
自20世纪70年代起,“数据结构”在西方国家的大学中,被普遍列为计算机本科的必修课程。
二、不同时期的教材
1978年著者已有10年从事系统软件开发的丰富经验,参加了北京大学计算机系的筹备和创建。
在担任数据库教研组组长期间,按系主任张士龙教授的安排,负责“数据结构”等新课的建设。从此围绕数据结构开展的工作,包括学习与研究、讲课与编写教材等,三十多年一直没有停息。其中花费时间和精力最多的是根据教学和科研的需要编写了下面4本教材(以8种不同版本出版)。
1.第一本教材:《数据结构》
1979年教育部在南京大学召开了第一次全国计算机系教学大纲研讨会,著者带着起草的“数据结构教学大纲”和“数据库教学大纲”与系主任一起参加了会议。会上充分肯定了我们的工作,并建议我们分工负责编写数据结构教材。根据这个大纲的修改稿,著者组织教研组内的老师共同编写了第一本《数据结构》讲义。1980年起,这本讲义在校内外(包括南京大学、中山大学等国内著名高校)广泛试用,三易其稿。1987年由高等教育出版社正式出版(此书1992年获国家教委颁发的全国优秀教材奖)。
2.第二本教材:《数据结构基础》
1985年,“北京市自学考试委员会”开设计算机专业。作为数据结构课程的考试委员,著者邀
请杨冬青和邵维忠两位老师共同编写了这本自学考试教材。1991年由北京大学出版社出版,第二年台湾儒林出版公司用繁体字出版。
3.第三本教材:《数据结构——C++与面向对象的途径》
20世纪90年代,面向对象的语言和方法开始流行。
根据教学和科研的需要,著者与裘宗燕老师合作编写了该教材。1998年作为国家“九五”重点教材由高等教育出版社出版,201年出修订版。
4.第四本教材:《算法与数据结构》
1998年,著者由北京大学校长聘任,主持全校理科主干基础课“算法与数据结构”,考虑到不同专业的需要,组织理科教师共同编写了一本适合理科各专业通用的新教材。该书列为“面向21世纪教材”,202年由高等教育出版社出版,获评“北京市高等教育教材”;20年出第二版,列为“十一五”国家级规划教材,获评教育部“普通高等教育教材”;20年再次修改并附著者教学光盘,出第三版。
数据结构与算法论文
回顾三十多年来围绕数据结构教学方面的工作,深深体会到与时俱进、精益求精地编写教材是提高教学水平的基础和关键。
三、数据结构教材需要与时俱进
计算机科学是一门高速发展的新兴科学,它的研究内容和研究方法都在不断发展。“结构”可以解释为:(1)把某些成分(成员、元素、原子等)按一定的规律或方式组织在一起的实体;或(2)把某些成分组织在一起的方式。 “数据结构”从字面上可以理解为就是以数据为成员的结构。在早期关于数据结构的论文中,一个数据结构多数情况下是指一个“实体”,而不是指“方式”。用通俗的程序语言的术语来讲,一个数据结构就可以看成一个结构化的数据。然而,计算机科学研究数据结构的目的是为了在计算机中有效地表示和处理客观世界的各种不同对象。所以我们关心的是这些数据结构如何存储在计算机中,并且能有效地完成各种需要的操作。随着计算机科学的发展,对于数据结构的教学与研究也逐步从“实体”,提高到“方式”,直到“抽象数据类型的实现”。
1.教材应该正确反映计算机科学的发展水平
前面提到的第一本教材,基本反映了20世纪70年代的认识水平。当时数据结构的许多概念还十分模糊,即使像“栈”和“队列”这些最基本的结构,它们的操作定义都不完全统一。许多教材对于什么是“数据结构”都没有解释。我们考察了20世纪70年代有影响的几本著作。其中H.A.Maurer用一个二元组B=〈K,R〉来形式地定义一个数据结构B,其中K是结点有限集合,而R是K上的关系的有限集合。C.C.Gotlieb和L.R.Gotlieb则将数据结构的定义扩充成一个五元组:〈V,O,G,M,S〉。其中V是所讨论的结构中成员取值的集合,O是结构中成员可执行的运算的集合,G是两个构成名字的文法,M是结构中各成员存放位置的集合,S是L(G) M的映射。
根据数据结构研究的目的和应用的需要,我们认为提到一种数据结构离不开以下三个方面:(1)构成数据结构的成员之间固有的逻辑关系;(2)将数据存储在计算机中的表示方法;(3)在计算机中对数据结构进行的运算或处理。将这三方面分别简称为数据的逻辑结构、存储结构和运算,所以在第一本教材中我们明确采用这三者的统一(三位一体)来非形式地定义“数据结构”的概念。
第二本《数据结构基础》以上一本教材内容为基础,根据N.Wirth教授提出的“算法+数据结构
=程序”关系,把程序理解为在数据的某些特定的结构和表示的基础上对于算法的描述。算法与数据结构是程序设计中相辅相成、不可分割的两个方面。为了适合于自学考试大纲的要求,参考了A.V.Aho教授20世纪80年代的教材,采用以数据结构为主线、算法为辅线的结构编写,使得内容更加紧凑、重点更加突出。
第三本教材《数据结构——C++与面向对象的途径》是在面向对象的语言和方法开始流行的20世纪90年代,采用面向对象的设计方法讲解数据结构的内容。参考Budd的工作,由简到繁、从易到难,系统地引入各种抽象数据类型的概念和实现,并在全书最后,用类图方式总结了各种经典的抽象数据类型在教材中的相互关系。
最后一本《算法与数据结构》参考了Kurt Mehlhorn等人的观点,把“数据结构”定义为“抽象数据类型的物理实现”。提出“物理实现”的意图是强调本课程关心的“实现”应具体到可以用计算机的两个最重要的物理量(主机的运行时间和内存的存储空间)来权衡。这一观点突出了抽象数据类型在数据结构教学中的地位,包含了数据结构与面向对象技术的内在联系。使读者可以从更高的层次理解数据结构与算法的关系,也容易解释数据的逻辑结构、存储结构与运算的三者关系。
后两本教材都反映了20世纪90年代的理解水平。其共同之处是:都强调了数据结构是“抽象数据类型的实现”,前一本使用的是面向对象的实现方法,而后一本为了突出讲解实现的物理效率,没有采用面向对象的方法。
2.教材内容既要相对稳定又要逐步更新
需要指出的是,尽管计算机科学的发展使得数据结构的地位和作用产生了许多变化,但是数据结构学习的目的并没有大的改变。所以教材的内容是基本稳定的。
第一本教材按“逻辑结构、存储结构、运算和应用”四个层次的结构组建架构。全书共18章,除第一章概论外分为四大部分:第一部分是线性结构,包括顺序表、链表与动态存储管理、串、内排序和线性表的检索等五章;第二部分是树形结构,包括树形结构的概念、树形结构的存储、二叉树周游算法、树目录和树形结构的其他应用等五章;第三部分是复杂结构,包括图和多维数组与广义表两章;第四部分是文件结构,包括顺序文件、散列文件、索引顺序文件、倒排文件和外排序等五章。全书概念清楚、内容丰富、体系完整。
第二本作为自学考试教材,内容在第一本的基础上加以精简,并增加集合与字典结构,把检
索归入集合的基本运算。在结构上更加强调基础、突出重点、适合自学。全书共分8章。第一章通过分析^p 一个实际问题的求解过程,引入抽象数据类型、数据结构和算法等重要概念作为全书的引论;第二章到第五章分别讨论了表、树、集合和图等常见的各种数据结构,一般均以抽象数据类型引路,重点讨论抽象数据类型在计算机中各种不同的实现方法;第六章对链接表示所需要的动态存储管理问题作了系统的阐述;第七章综述了外存上数据结构的各种组织方式;第八章给出内排序和外排序的各种算法。
第三本由于采用了面向对象的方法,在内容上做了较大调整。增加了面向对象的方法入门和优先队列。全书共分12章:第一章,绪论;第二章,C++与面向对象初步;第三章,字符串,本章定义了一种更安全可靠的字符串类型,同时也以字符串做例子,讨论数据抽象和封装的有关问题;第四章,向量,本章建立了一种安全可靠的向量数据类型,还给出了几个主要的向量排序算法;第五章,动态数据结构——链表,主要讨论了各种常用的链表结构及其实现方法;第六章,栈和队列,介绍了栈和队列的抽象概念、具体实现及其应用;第七章,树和二叉树,介绍了树和二叉树的概念,重点介绍二叉树的实现及树结构用于快速检索的一些技术;第八章,优先队列,主要介绍了堆和斜堆的概念以及通过它们实现优先队列的方法;第九章,集合和字典;第十章,散列表;第十一章,图;第十二章,文件。在附录中用
类图方式给出本书介绍的主要抽象数据类型及其相互关系图。
第四本书作为北京大学主干课“算法与数据结构”的通用教材。全书共分以下10章。第一章绪论;第二章线性表;第三章字符串;第四章栈与队列;第五章二叉树与树;第六章集合与字典;第七章高级字典结构;第八章排序,第九章图;第十章算法分析^p 与设计,主要给读者概括地介绍算法的分析^p 和设计的主要技术。本书在编写中注意到知识模块的独立性和相关性,不同专业的学生可以根据不同的需要进行组合使用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论