通过本课程学习,使学生掌握计算机科学中组织、表示和处理数据的基本方法,培养学生运用数据结构和算法知识解决应用问题的能力,提高算法设计和程序设计水平,为《数字图像处理与图像通信》、《网络技术与应用》和《数据库技术与应用》等很多与IT相关的后续课程学习,也为“大信息”背景下非数值应用软件的开发打下良好的理论基础。本课程的学习,有助于IT相关专业的学生解决各自专业中软件设计的问题。
本课程的教学内容包括线性表、栈和队列、数组、树和二叉树、集合、搜索树、散列表、图和文件等常见的数据结构,讨论各种典型的搜索和内、外排序算法。此外,还介绍递归算法、各种典型的搜索算法和内、外排序等算法,并给出算法分析的基本方法。
希望同学们在经过本课程的学习,能够做到:从数据的逻辑结构、存储结构和运算三个方面理解并掌握线性表、栈、队列、数组、树、图和文件等常用的数据结构;了解在各种常用的数据结构上实现的排序和查找运算;对算法的时间和空间复杂性有一定的分析能力;针对常见的应用问题,能选择合适的数据结构及设计有效的算法解决问题。
从数据的逻辑结构、存储结构和运算三个方面理解并掌握线性表、栈、队列、数组、树、图和文件等常用的数据结构;了解在各种常用的数据结构上实现的排序和查找运算;对算法的时间和空间复杂性有一定的分析能力;针对常见的应用问题,能选择合适的数据结构及设计有效的算法解决问题。
考核方式包括平时考核与期末考核。
平时考核:通过单元测验成绩、学生作业情况、学生对问题讨论参与程度进行评分;
期末考核:通过期末考试成绩进行评分。
单元测验、单元作业、期末考试和论坛讨论评分比例分别是30%、20%、40%、10%。
课程总成绩大于等于60为合格;大于等于90为优秀。
合格即可获得相应证书。
1.知识单元一:基础知识(3学时)
(1)知识点一:算法与数据结构
(2)知识点二:什么是数据结构
(3)知识点三:数据抽象和抽象数据类型
(4)知识点四:描述数据结构和算法
(5)知识点五:算法分析的基本方法
教学基本要求:
了解课程的学习目的和内容,深刻理解有关数据结构的基本概念,理解将抽象数据类型应用于数据结构研究的方法,掌握算法分析的基本方法。
2. 知识单元二:线性表(6学时)
(1)知识点一:线性表ADT
(2)知识点二:线性表的顺序表示
(3)知识点三:线性表的链接表示
(4)知识点四:多项式的算术运算
教学基本要求:
深刻理解线性表抽象数据类型以及线性表的顺序和链接表示方法,熟练掌握线性表中基本运算的实现算法,学会分析各算法的性能,以及学会使用线性表求解一元多项式的算术运算。
3. 知识单元三:栈和队列(4学时)
(1)知识点一:栈
(2)知识点二:队列
(3)知识点三:表达式计算
(4)知识点四:递归
教学基本要求:
深刻理解栈和队列抽象数据类型以及它们的顺序和链接表示方法,熟练掌握栈和队列数据结构中基本运算的实现算法,掌握如何借助栈进行后缀表达式计算、理解其实现方法,了解递归的基本概念及递归调用的方法。
4. 知识单元四:数组(4学时)
(1)知识点一:数组
(2)知识点二:特殊矩阵
(3)知识点三:稀疏矩阵
教学基本要求:
理解数组抽象数据类型,掌握一般数组的顺序表示方法以及对称矩阵的存储方式,理解稀疏矩阵的含义,掌握稀疏矩阵的三元组表示方法,了解利用三元组表示法的矩阵快速转置算法。
5. 知识单元五:树(10学时)
(1)知识点一:树的基本概念
(2)知识点二:二叉树
(3)知识点三:二叉树的遍历
(4)知识点四:树和森林
(5)知识点五:堆和优先权队列
(6)知识点六:哈夫曼树和哈夫曼编码
教学基本要求:
了解树和森林的基本概念及主要存储方式,深刻理解二叉树的定义、性质和二叉链表存储结构,熟练掌握二叉树遍历的三种递归算法,学会利用二叉树遍历求解其它相关问题,掌握森林与二叉树的转换方法,了解堆和优先权队列数据结构,掌握建堆算法,了解在优先权队列中插入、删除元素的方法,理解哈夫曼树构造方法,学会哈夫曼编码和译码的方法。
6. 知识单元六:集合(2学时)
(1)知识点一:基本概念
(2)知识点二:顺序搜索
(3)知识点三:二分搜索
教学基本要求:
理解集合的基本概念,熟练掌握在集合中相关的搜索算法,具体包括有序表的顺序搜索、对半搜索的递归和非递归算法,了解使用二叉判定树进行二分搜索平均时间复杂度的方法。
7. 知识单元七:搜索树(5学时)
(1)知识点一:二叉搜索树
(2)知识点二:二叉平衡树
(3)知识点三:B−树
教学基本要求:
深刻理解二叉搜索树的定义和性质,熟练掌握二叉搜索树中搜索、插入和删除元素的算法,了解二叉平衡树定义以及在二叉平衡树中插入元素的平衡旋转方法,掌握B-树的定义以及在B-树中插入和删除元素的方法。
8. 知识单元八:散列表(3学时)
(1)知识点一:散列表
教学基本要求:
掌握散列表的概念,了解常见的散列函数,掌握解决冲突的拉链法和开地址法。
9. 知识单元九:图(10学时)
(1)知识点一:图的基本概念
(2)知识点二:图的存储结构
(3)知识点三:图的遍历
(4)知识点四:拓扑排序
(5)知识点五:关键路径
(6)知识点六:最小代价生成树
(7)知识点七:单源最短路径
教学基本要求:
深刻理解图的基本概念,熟练掌握图的邻接矩阵和邻接表存储结构,理解图中一些常见的算法:图的深度优先和广度优先遍历算法,拓扑排序和关键路径算法,求最小代价生成树的普里姆和克鲁斯卡尔算法,以及求单源最短路径。
10. 知识单元十:排序(9学时)
(1)知识点一:内排序基本概念
(2)知识点二:简单排序算法
(3)知识点三:快速排序
(4)知识点四:两路合并排序
(5)知识点五:堆排序
(6)知识点六:外排序
教学基本要求:
熟练掌握各种常见的内排序算法,学会分析和比较各种内排序算法的时间和空间复杂度,理解这些算法的异同,学会针对实际排序问题,选择合适的排序算法。了解外排序的基本概念和基本方法。
高级语言程序设计(C语言)
高等数学
1.教材
《数据结构(C语言)》,王海艳等,人民邮电出版社,2017年9月
(21世纪高等教育计算机规划教材)
2.主要参考书
[1]《数据结构与算法分析:C语言描述(原书第2版)》,(美)Mark Allen Weiss 著, 冯舜玺 译,机械工业出版社,2004年;
[2] 《计算机科学丛书:C程序设计语言(第2版·新版)》,(美) Dennis M.Ritchie(丹尼斯·里奇) 著,徐宝文,李志 译,机械工业出版社,2004年;
[3] 《数据结构与算法:C++语言描述》,陈慧南 著,高等教育出版社,2005年;
[4] 《清华大学计算机系列教材:数据结构(C语言版)》,严蔚敏、吴伟民 著,清华大学出版社,2011年;
[5] 《大话数据结构》,程杰 著,清华大学出版社,2011年。