第2版前言
数据结构是软件设计的重要理论和实践基础,数据结构设计和算法设计是软件系统设计的核心。“数据结构”课程讨论的知识内容是软件设计的理论基础,“数据结构”课程介绍的技术方法是软件设计中使用的基本方法。“数据结构”是理论与实践并重的课程,要求学生既要掌握数据结构的基础理论知识,又要掌握运行和调试程序的基本技能。因此,“数据结构”课程在计算机类各专业本科学生的培养过程中有着十分重要的地位,是计算机类专业的一门核心课程,是培养程序设计能力的必不可少的重要环节。
“数据结构”课程内容多,概念抽象,理论深奥,递归算法难度较大,一直是计算机专业最难学的课程之一。本书精选基础理论内容,重点是数据结构设计和算法设计,通过降低理论难度和抽象性、加强实践环节等措施,进一步增强学生的理解能力和应用能力,力求取得较好的教学效果。
本书的特色说明如下。
(1)内容全面、注重基础
本书全面、系统地介绍数据结构的基础理论和算法设计方法,阐明线性表、树、图等数据模型的逻辑结构,讨论它们在计算机中的存储结构,讨论每种数据结构所能进行的多种操作,以及这些操作的算法设计与实现;针对软件设计中应用频繁的查找和排序问题,根据不同数据结构对操作的实际需求,给出多种查找和排序算法,并分析算法的执行效率。
本书内容选择适合工科院校,理论叙述精练,简明扼要,结构安排合理,由浅入深,层次分明,重点突出,算法分析透彻,程序结构严谨规范。内容涉及的广度和深度符合本科培养目标的要求。
(2)采用C++语言和面向对象程序设计思想描述数据结构和算法
数据结构和算法的设计不依赖于程序设计语言,但数据结构和算法的实现依赖于程序设计语言。描述数据结构所采用的软件方法和算法语言,需要随着软件方法及算法语言的不断发展而发展。面向对象程序设计方法是软件分析、设计和实现的新方法,是目前软件开发的主流方法。
C++语言是目前功能最强、应用广泛的支持面向对象程序设计的代表语言。C++语言具备表达数据结构和算法的基本要素。因此,采用C++语言描述数据结构和算法不仅可行,也是“数据结构”课程内容教学改革的必然,完全符合本科培养目标的要求。本书采用C++语言描述数据结构和算法,算法以函数方式呈现,函数有明确的输入参数和返回值,以面向对象程序设计思想贯穿始终,使“数据结构”课程真正成为有效培养程序设计能力的训练课程,并与程序设计语言课程更好地衔接。
本书只是借用C++语言作为数据结构和算法的描述语言,重点仍是数据结构和算法设计本身,而不是表现C++语言的复杂技术。因此,使用C++语言的基本原则是,尽可能使用C++语言的最基本成分(如数据类型、数组、函数、指针、类等)描述数据结构和表达算法设计思想,展现原始设计能力,使程序简洁、明了,算法思路清楚、明白,淡化或回避C++语言的友元类、运算符重载、多重继承等技术。
当一个问题有多种解决办法时,尽可能采用简单、直接并且不造成歧义的办法。例如,对数组元素进行操作,尽量采用下标形式,避免使用指针形式;函数的返回结果尽量采用返回值形式,避免使用指针的指针;构造函数尽量采用重载方式,避免采用默认值而造成的歧义等。
(3)增强实际应用
数据结构是一门理论和实践紧密结合的课程,因此需要在透彻理解理论知识的基础上,通过实践性环节,逐步锻炼学生的程序设计能力。
注重传授基础理论知识,注重在实践环节中培养程序设计的基本技能,是本书第1版的重要特色,也是本书的重要特色。本书精心选择并设计一系列与实际应用息息相关的例题、习题、实验题、课程设计题等,使原本枯涩难懂的理论变得生动有趣,并以此说明数据结构和算法的必要性,以及它们对实际应用程序设计的指导作用。同时,要求学生能在生活中发现问题并解决问题,提高学习兴趣,力求在潜移默化中使学生理解和体会理论知识的重要性,并掌握如何使用它们的方法。
除了每章的实验题给出详细的训练目标、设计内容和设计要求之外,针对课程设计实践性环节,本书给出了多种算法设计与分析的综合应用程序设计实例,详细说明需求方案、设计思想、模块划分、功能实现、调试运行等环节的设计方法,贯彻理论讲授与案例教学相结合的教学方法。
程序设计有其自身的规律,不是一蹴而就的,也没有捷径。程序员必须具备基本素质,必须掌握程序设计语言的基本语法以及算法设计思想和方法,并且需要积累许多经验。这个逐步积累的过程需要一段时间,需要耐心,厚积而薄发。
本书第1~9章是数据结构课程的主要内容,包括线性表、树、图等数据结构设计以及查找和排序算法设计;第10章为综合应用设计,包括课程设计范例和参考选题;第11章介绍如何使用Visual C++ 6.0集成开发环境,重点和难点是程序调试技术。第11章虽然放在最后,却是贯穿始终的,配合各章逐步进行。熟悉集成开发环境、掌握程序调试技术也需要经过一个逐步积累的过程。
本书所有程序均已在Visual C++ 6.0开发环境中调试通过。
本书由叶核亚编著,在写作过程中作者得到了许多帮助和支持,感谢南京大学计算机科学与技术系陈本林教授认真、细致地审阅了全稿,提出了许多宝贵意见;感谢陈立、廖雷、阚建飞、陈建红、陈瑞、王青云、李林广、刁翔、沈晨鸣、王少东等老师给予的帮助;感谢电子工业出版社的支持;感谢众多读者朋友对本书第1版提出的宝贵意见。
对书中存在的不妥与错漏之处,敬请读者朋友批评指正。
本书为任课教师提供配套的教学资源(包含电子课件和例题源代码、习题解答),需要者可登录到华信教育资源网站(http://www.huaxin.edu.cn或http://www.hxedu.com.cn),注册之后进行下载,或发邮件到unicode@phei.com.cn咨询。
作者