课程概况
计算机是现代社会中用于解决问题的重要工具,支撑这个工具高效运转的就是其后的各种系统程序、应用程序。图灵奖获得者N.Wirth写了一本经典著作“程序=算法+数据结构”。数据结构,是抽象的表示数据的方式;算法,则是计算的一系列有效、通用的步骤。算法与数据结构是程序设计中相辅相成的两个方面,是计算机学科的重要基石。
本课程将带领我们围绕着“算法+数据结构=程序”的思路,以问题求解为导向进行学习。希望能够帮助大家提高理论、抽象、设计的能力。在扎实的经典理论基础上,运用问题抽象、数据抽象、算法抽象来分析问题,应用适当的数据结构和算法来设计和实现相应的程序。通过课程学习,大家的抽象思维能力、问题求解能力将得到较大提升,编程能力和代码质量会有质的飞跃!
在求解实际问题方面,我们会学习到通过权衡时空和其他资源开销,利用数据结构来组织数据、设计高效的算法、完成高质量的程序以满足错综复杂的实际应用需要。
本课程采用张铭主编的国家“十一五”规划教材《数据结构与算法》(高等教育出版社)。适合计算机以及相关理工专业的本科生学习,建议先修过计算概论等课程,最好具备C++等面向对象的程序设计基础。对于具有C语言结构化程序设计基础的学生,本课程第0章补充了一些面向对象的基本内容。
课程所学到的内容会被利用到计算机科学后续的各个课程中,如操作系统、软件工程、数据库概论、编译技术、计算机图形学、人机交互等。希望可以为大家将来从事计算机相关的学习、研究和开发工作打下扎实的基础。
课程大纲
第一章 概论
1.1 课程介绍
1.2 问题求解
1.3 数据结构与抽象数据类型
1.4 算法特性及分类
1.5 算法效率与度量
1.6 补充 面向对象简介(选修)
1.7 补充 类的特殊成员(选修)
1.8 补充 模版函数与模版类(选修)
1.9 补充 输入输出流(选修)
第一章 概论 测验
编程作业
第二章 线性表
2.1 线性结构
2.2 顺序表
2.3 链表
2.4 顺序表和链表的比较
第二章 线性表测验
第二章 线性表编程作业
第三章 栈与队列
3.1 栈
3.2 栈与递归
3.3 递归转非递归
3.4 队列
3.5 队列的应用
第三章 栈与队列测验
栈与队列编程作业
第四章 字符串
4.1 字符串基本概念
4.2 字符串的存储结构
4.3 字符串运算的算法实现
4.4 字符串的快速模式匹配
第四章 字符串测验
编程作业
第五章 二叉树
5.1 二叉树的概念
5.2 二叉树的抽象数据结构
5.3 二叉树的搜索
5.4 二叉树的存储结构
5.5 二叉搜索树
5.6 堆与优先队列
5.7 Huffman树及其应用
第五章 二叉树前半部分(5.1~5.4)测验
第五章 二叉树后半部分(5.5~5.7)测验
编程作业
第六章 树
6.1 树的定义、树与二叉树的等价转换
6.2 树的抽象数据结构及树的遍历
6.3 树的链式存储结构
6.4 树的父指针表示法
6.5 树的顺序存储和K叉树
第六章 树测验
编程作业
编程作业-二叉搜索树修正
第七章 图
7.1 图的概念和抽象数据类型
7.2 图的存储结构
7.3 图的遍历
7.4 最短路径
7.5 最小生成树
第七章 图测验
编程作业
第八章 内排序
8.1 排序问题的基本概念
8.2 插入排序(Shell 排序)
8.3 选择排序(堆排序)
8.4 交换排序(冒泡排序、快速排序)
8.5 归并排序
8.6 桶排序
8.7 基于静态链的基数排序
8.8 链式基数排序
8.9 索引排序
8.10 排序算法的时间代价
第八章 内排序前半部分(8.1~8.4)测验
第八章 内排序后半部分(8.5~8.10)测验
编程作业
第九章 外排序
9.1 主存储器和外存储器
9.2 文件的组织和管理
9.3 外排序
第九章 外排序测验
第十章 检索
10.1 检索的概念
10.2 基于线性表的检索
10.3 集合的检索
10.4 散列表的概念和散列函数
10.5 散列冲突处理
10.6 散列的实现及性能分析
第十章 检索测验
编程作业
第十一章 索引
11.1 静态索引
11.2 倒排索引
11.3 B 树
11.4 B+ 树
11.5 位索引技术
11.6 红黑树
第十一章 索引测验
第十二章 高级数据结构(上)
12.1 多维数组
12.2 广义表
12.3 存储管理
第十二章 高级数据结构(上)测验
第十二章 高级数据结构(下)
12.4 Trie 树
12.5 AVL 树
12.6 Splay 树
第十二章 高级数据结构(下) 测验
参考资料
[1] 张铭,王腾蛟,赵海燕,《数据结构与算法》,高等教育出版社,2008年 6月。普通高等教育“十一五”国家级规划教材。
Textbook: Ming Zhang, Tengjiao Wang, Haiyan Zhao, "Data Structures and Algorithms", Higher Education Press, 2008.
[2] 张铭,赵海燕,王腾蛟,《数据结构与算法实验教程》,高等教育出版社,2011年 1月。普通高等教育“十一五”国家级规划教材。
[3] 张铭、赵海燕、王腾蛟,《数据结构与算法--学习指导与习题解析》,高等教育出版社,2005年 10月。 “十五”国家级规划教材配套参考书。
[4] S. Sahni ,《数据结构算法与应用—C++语言描述》 ,汪诗林等译,机械工业出版社,2000.
[5] M. H. Alsuwaiyel, Algorithms Design Techniques and Analysis, 电子工业出版社影印,2003年1月。
[6] T. H.Cormen, C. E.Leiserson, R. L. Rivest, C. Stein, Inroduction to Algorithms, 高等教育出版社影印,2002年5月。
[7] D. E.Knuth 著,苏运霖 译,《计算机程序设计艺术,第1卷基本算法》,国防工业出版社,2002年。
[8] J. Kleinberg, E. Tardos. Algorithm Design. Addison Wesley, 2005.
[9] C. A. Shaffer, Data Structures and Algorithm Analysis in C++, Third Edition, Dover Publications., 2011.
[10] 王晓东,《算法设计与分析》 ,清华大学出版社,2003年1月。
[11] 课程源代码:https://media.openjudge.cn/upload/DSMooc/DSCode_ZhangWangZhao2008_06.rar