前言
“数据结构”是计算机大类相关专业的一门重要的专业基础课,既是计算机大类相关专业考研的必考科目,又是从事IT相关工作必须掌握的专业基础素养。
“数据结构”课程的教学目的是使学生能够针对具体问题选择合适的数据结构,并合理地组织数据,有效地存储和处理数据,以培养学生的数据抽象能力; 使学生能够将数据结构和应用付诸编程实践,正确地设计、编制高效算法,并对算法进行分析和评价,以培养学生良好的程序设计开发技能; 使学生能够应用工程知识和专业背景知识分析复杂工程问题,进行复杂程序设计的训练,解决工程实践问题,以培养学生的工程实践能力。这里围绕教学目的就教学改革、教材内容安排和资源等方面展开说明。
数据结构的教学与改革
在近十年的数据结构教学中,围绕着课程教学目的,编者在以下几个方面体会深刻。
1. 处理好数据结构中抽象与具体的关系
现有的教科书对概念和算法的讲解过于抽象,初学者不容易接受。在数据结构的教学过程中要注意化抽象为具体,同时也要注重培养学生的抽象思维能力。数据结构的基本操作的算法实现设计更为具体,读者只要添加主程序就可以直接执行,另外每种数据结构都设计了抽象数据类型,能提高读者的抽象思维能力,并且在基本线性表部分通过动态链接库指导学生掌握封装的技术。
2. 通过编程调试理解算法
在课堂教学中,编者通过调试讲解算法,使学生所见即所得,得到了学生的一致认可。例如在学习指针时,教师虽然做了一些比喻,但学生总是觉得和计算机程序真正运行起来相比还是有差距的。在教学开发环境中将调试信息给学生看,观看真正分配的内存地址,指针变量所在的位置,函数调用时栈的分配与回收,链表的插入、删除等,学生切实看到了真实的情况,印象深刻,教学效果好。
3. 描述语言和应用实践
由于C语言得到了广泛的应用,对数据结构与算法的初学者来说能够将更多的精力关注在这方面,而不是语言本身。因此教学中的绝大部分实现采用C语言,但在有些复杂的应用问题的解决中引导学生使用STL,并且指导学生有意识地使用Python、Java、C#等语言中数据结构的相关接口,其目的是关注应用问题的解决方案,而不是细节的处理。
4. 教学相长
“师者,所以传道授业解惑也。”教学是个不断积累的过程,编者在近十年的教学过程中一方面传授给学生知识,另一方面在解决学生问题的过程中也不断提升自身的教学水平,更新完善教学内容、迭代开发教学资源。
内容组织特色
本书的内容组织有以下特色。
(1) 以基本数据结构为主线,包括线性表、栈和队列、二叉树、图、散列等,以查找为脉络,贯穿其中,包括顺序查找、二分查找、散列查找和模式匹配等,由浅入深,由简及繁,符合学生的认知规律。
(2) 在每章开头总结了两个关键词进行章节内容概览,这样做的目的是“开宗明义”,使学生能够尽快抓住要点展开学习。在章节内容的安排上,按小节组织每章中涉及的知识点,教师既能按照常规组织教学,也能自行组织微课进行教学,学生能够灵活安排进行碎片化学习。
(3) 侧重动手应用实践的主线。每种数据结构基本算法不是伪代码,而是提供完整的可直接运行的程序,之后安排了应用该数据结构的具体应用问题,所有程序按照统一的风格提供。章节间的先后顺序也有侧重实践主线的思想,例如搜索树安排在树和二叉树章节的后面,使学生可以应用已学的二叉树和高级搜索算法进行高效查找算法设计实践。课后习题没有设置填空题和选择题,而是以算法设计和数据结构应用为主,进一步强调对学生的分析问题、解决问题的能力培养。
(4) 点明数据结构应用的多个领域以及课程间的关联。例如Linux中用到的双循环链表数据结构,编译原理中的表达式计算,区块链中用到的Merkle树,人工智能词汇切分中用到的Trie树,让学生感受到数据结构的博大精深和无限魅力。
教学资源特色
本书提供了多样的立体化学习资源,既有多媒体PPT课件、完整的工程代码和图表等静态资源,也有跨平台的H5演示软件等动态资源,以适应读者的不同需求,同时提供配套的实验教材,强化学生的动手实践能力。
本书由桂林电子科技大学计算机与信息安全学院张瑞霞、张敬伟共同编著而成。张瑞霞负责全书的整体统稿构思,智国建教师为本书的编辑、排版做了大量的工作,课程组组长周娅以及课程组的教师们为本书提出了有益的建议。唐麟老师为部分代码做了调试工作,曾泽宇、苏宣瑞、陈思博、王馨茹、胡星高、李婷、骆志成等同学分别指出了多处纰漏和错误,在此谨向他们表示感谢!
感谢清华大学出版社的各位编辑,正是依靠他们的辛勤工作鼎力支持,本书才得以顺利出版,特别感谢郑寅堃、王冰飞两位编辑高效负责的工作。
由于编者水平有限,书中难免存在不足和错误之处,欢迎读者不遗余力地批评、指正,在此深表感谢。
编者
2018年3月