《算法与数据结构》课程是计算机科学与技术学科中一门十分重要的专业基础课程和专业核心课程。中国计算机学会教育专业委员会和全国高等学校计算机教育研究会在《计算机学科教学计划1993》中,把《算法与数据结构》课程列为计算机科学与技术学科公共要求的9个主科目之一。中国计算机科学与技术学科教程2002研究组在《中国计算机科学与技术学科教程2002》中,把《算法与数据结构》课程列为计算机科学与技术学科16个专业核心课程之一。计算机科学与技术学科的各个领域中,都要求科技工作者具备良好的算法与数据结构基础。
然而,《算法与数据结构》课程的学习难度较大。除了课程自身的内容多、介绍的方法技术多及在先修课程中涉及的专业基础知识少之外,《算法与数据结构》课程有着它自身的一些特点和规律:①学生不易理解和接受数据的逻辑结构的抽象数据类型表示; ②动态存储结构的动态性和递归技术的抽象性,使得学生对相应的知识不易掌握; ③算法描述的形式化和程序设计语言化使许多学生望而生畏; ④算法设计的灵活多样性以及算法分析等内容使得许多学生较难掌握。所有这些,都是学生感觉到这门课程难度大的原因。许多学生在课堂上一听就明白,拿起课本认真一看也能基本弄懂,但做作业,尤其是做算法设计题目时总觉得无从下手。究其原因,首先主要是听懂数据结构的内容和应用数据结构知识解决实际问题之间存在着相当长的距离;其次是理解掌握算法分析和设计的各种方法、技术与灵活运用这些方法解决各种具体问题之间也存在着较大距离。逐步缩短进而消除这些距离是解决《算法和数据结构》课程学习难的关键所在,其根本途径在于加强实践环节,多学、多用、多做及多练,熟能生巧,以期达到对所学知识和方法技能的融会贯通。
在认真总结了《算法和数据结构》课程30年教学实践的基础上,结合应用型大学的教学特点和学生学习的实际需求,我们编写了《算法和数据结构习题精解和实验指导》一书,以期通过该书中的习题解答和具体的实践环节来给学生一些解答示范和启发,帮助学生更好地学习和掌握课程内容,理解和掌握算法设计所需的方法和技术,为整个专业学习打下坚实的基础。考虑到部分学生本科毕业后考研的需要,该书也选择了若干典型的研究生入学试题做了精细解析。
本书是同期出版的教材《算法与数据结构》的配套用书。为了便于对照阅读,本书的章序与《算法与数据结构》一书的章序保持一致,且一一对应。各章内容分别介绍《算法与数据结构》相应章节所涵盖的知识和技能的概括总结,归纳出本章知识主线,有利于学生复习总结和理解掌握;对各章之后的习题做精细解答,对典型题目提出多种解题思路;以及对上机实验题也作了详细解答和指导,通过实验使学生了解并学会如何运用数据结构知识去解决现实世界中的实际问题,具备较复杂程序的初步设计能力。书后增添了3套模拟练习题作为附录,是为了便于学生在课程结束后复习巩固主要教学内容。
组织这本辅助教材的主要目的是为了帮助学生学好《算法与数据结构》这门课程,所以在使用过程种要注意以下几点:①与课程学习内容同步使用。这样有利于教材中知识点的理解和掌握,有利于巩固和提高课堂教学效果。 ②切忌照抄照搬。算法的设计具有不唯一性,对算法设计类题目,书中给出了一种或多种解答方法,要在学习、理解及领会的基础上自己动手设计算法并编写程序,这样才能获得更好的效果。 ③遵循循序渐进的原则。书中内容按知识结构分类组织,同类内容按典型到一般、由易到难的次序排列,读者最好能按次序阅读学习。 ④学会举一反三,触类旁通。课程内容中的知识点是有限的,但运用所学知识和方法技术解决实际问题则是无限的。重在掌握基本原理、基本方法和基本技术,并学以致用和灵活运用。
本书是经宁正元教授统稿,由多人共同编著的,其中宁静完成第1~3章,赖贤伟完成第4~8章和附录。王秀丽教授、林大辉副教授、易金聪副教授、黄思先副教授、刘雄恩副教授、黄建实验师及林敏讲师等在本书的成稿前期工作或精品课程建设中做了部分工作或提供有益帮助。高等教育出版社和清华大学出版社对本书的出版自始至终都给予了极大的支持和鼓励,作者在此一并表示最诚挚的感谢。
鉴于时间仓促和作者水平所限,书中内容虽经反复讨论与仔细推敲,仍难免存在着错、谬、疏及漏之处,敬请同行专家和广大读者不吝赐教,我们将不胜感激。
编 者2011年12月
