“数据结构”是计算机科学与技术专业、软件工程专业甚至于其它电气信息类专业的重要专业基础课程。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其它课程,还是对从事大型信息工程的开发,都是重要而必备的基础。
程序设计解决问题往往有多种方法,且不同方法之间的效率可能相差甚远。程序的时间和空间效率,不仅跟数据的组织方式有关,也跟处理流程的巧妙程度有关。本课程将介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助学员学会数据的组织方法和一些典型算法的实现,能够针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。
注意:本课程只涉及最基础的数据结构和与之关联的最基本的算法,更多更复杂的数据结构和经典的解决优化问题的算法,将在后续课程中介绍。
本课程的特点是,对每一种重要的经典数据结构,我们都会从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。
坚持完成本课程学习、并按照要求完成所有练习的学员,应该具备了PAT(Programming Ability Test)甲级需要的所有基础知识,辅以充分的英语阅读能力和熟练的编程能力,应可以取得优良成绩。
这门课的一个重要目的是,帮助大家明白一些经典的数据结构为什么存在、以及在什么情况下可以最好地解决什么样的问题。要做到这一点,非自己动手解决问题不可。
与程序设计课程类似,每一周的课后,我们都留有两类练习,一类是在线完成的选择、是非或填空题(不包括视频中插入的提问),以下称作“小测验”;一类是在PAT(Programming Ability Test)网站(http://www.patest.cn/)上的编程练习题,以下称作“PAT编程”。你可以自己注册帐户,随时进行练习,并不限于发布练习的时段。注意:你的PAT账号所用的电子邮箱必须和中国MOOC的账号所用的相同。如果忘记帐号或密码,请用你注册时登记的电子邮箱发求助信到 chenyue@zju.edu.cn。
课程过半时,我们还会安排一次期中考试,是在线完成的选择、是非或填空题,不包括编程题。期中考试在一周内用连续的60分钟完成均有效。
最后,在5月18-24日一周,我们会安排一次在线期末考试,需要在某一天内用连续的120分钟完成。
本课程获得证书的资格,由以下因素决定:
小测验:必须完成全部小测验。成绩无所谓,但是留有未做的测验则不能获得证书;
PAT编程:必须在期末考试前拿到至少200分,才能获得证书,但是分数不会带入总评成绩;
期中考试:得分占总评分数的40%;
期末考试:得分占总评分数的60%;
满足条件1和2并且总评成绩达到60分及以上者,可以获得本课程的合格证书。
在课程结束后参加本年度秋季或冬季的PAT甲级考试,获得70分及以上者,可以获得优秀证书。
学过一门编程语言,具有一定编程基础,即可理解主要内容,因为数据结构本质上是不依赖于编程语言的,且编程练习平台可以接受十余种语言代码的提交。但由于算法描述多用类似C语言的伪码,所以如果学过C语言会更容易接受。
如果还对计算机处理离散结构的基本理论和方法有较为系统的理解(即预修“离散数学”),则对更扎实地掌握本课程内容有很大帮助,但并不是必须的。
第一讲 基本概念-[陈越]
1.1 什么是数据结构
1.2 什么是算法
1.3 应用实例:最大子列和问题
第二讲 线性结构-[何钦铭]
2.1 线性表及其实现
2.2 堆栈
2.3 队列
2.4 应用实例:多项式加法运算
第三讲 树(上)-[何钦铭]
3.1 树与树的表示
3.2 二叉树及存储结构
3.3 二叉树的遍历
第四讲 树(中)-[何钦铭]
4.1 二叉搜索树
4.2 平衡二叉树
线性结构之习题选讲-[陈越]
第五讲 树(下)-[何钦铭]
5.1 堆
5.2 哈夫曼树与哈夫曼编码
5.3 集合及运算
第六讲 图(上)-[陈越]
6.1 什么是图
6.2 图的遍历
6.3 应用实例:拯救007
6.4 应用实例:六度空间
第七讲 图(中)-[陈越]
树之习题选讲
7.1 最短路径问题
第八讲 图(下)-[陈越]
8.1 最小生成树问题
8.2 拓扑排序
图之习题选讲
第九讲 排序(上)-[陈越]
9.1 简单排序(冒泡、插入)
9.2 希尔排序
9.3 堆排序
9.4 归并排序
第十讲 排序(下)-[陈越]
10.1 快速排序
10.2 表排序
10.3 基数排序
10.4 排序算法的比较
第十一讲 散列查找-[何钦铭]
11.1 散列表
11.2 散列函数的构造方法
11.3 冲突处理方法
11.4 散列表的性能分析
11.5 应用实例:词频统计
第十二讲 综合习题选讲-[陈越]
推荐教辅和资料:
1.《数据结构》,陈越、何钦铭、徐镜春、魏宝刚、杨枨 编著,高等教育出版社,2012年4月
2.《数据结构学习与实验指导》,陈越、何钦铭、徐镜春、魏宝刚、杨枨 编著,高等教育出版社,2013年5月
3. 课程练习网站:http://www.patest.cn/contests/mooc-ds2015spring 《中国大学MOOC-陈越、何钦铭-数据结构2015春习题集》
0。我忘记了PAT上的帐户信息怎么办呀?!
答:请用你注册时登记的电子邮箱发求助信到 chenyue@zju.edu.cn。
1。我不是计算机专业的,能学这门课吗?
答:只要会写程序就能学。
2。我数学不好,能学这门课吗?
答:会算术就可以了…… 有个别例子涉及基础数学概念(比如什么是多项式),花一分钟上网搜索一下定义就可以搞定。
3。我不会写程序,能学这门课吗?
答:不能…… 还是先学会写程序再说吧~ 隔壁翁恺老师的C语言讲得很好懂,推荐~
4。学这门课每周要花多少时间?
答:平均4-8小时,开始可能轻松一点,后面的课业会越来越重 —— 这样你才能长进嘛~ 建议开课前先去PAT做一下自测:如果1小时内能做到满分,这门课你是可以轻松搞定的;如果需要2小时,那么你学这门课每周估计要花5小时以上;如果3小时还拿不到满分,那你这门课可能要花8小时以上(说不好是每周还是每天……)
5。为什么我的程序在自己机器上跑得好好的,提交到PAT网站就各种错误?
答:因为你自己用于测试自己程序的数据太弱了同学…… 另外一定注意严格按照题目要求输出结果,不要输出如“Please input ...”之类的多余信息。要用标准输入输出,不要从文件读写。不要急,想想ACM竞赛的世界冠军们也是这样哭着走过来的,心理就平衡了~
6。PAT的测试数据能不能公布呀?
答:不能。公布数据后一定会有人直接打印结果的……
7。什么是PAT甲级,能吃?
答:PAT是Programming Ability Test的缩写,是一个考试,分顶级、甲级、乙级三个级别。证书真的能吃 —— 就如托福考试在留学申请中的作用一样,八十余家联盟企业划定了PAT分数线,对达到分数线的考生给予免除与编程能力测试相关的笔试,直接邀请进入面试的机会。数十家企业的HR排队打电话请你去面试,想想也是醉了……
8。什么时候考PAT最合适?
答:一般大三下半学期春季考试,凭成绩在企业春招中找份实习工作,暑假先去实践一下,对找工作非常有帮助。
或者大四开学参加秋季考试,正对上企业大规模秋招的时间。
万一秋季没考好、并且秋招时没找到理想的工作,还可以参加冬季考试、同时选择春季才把成绩推送给企业。
万一冬季也没考好,还有最后一次春季考试,这样大四阶段还可以抓住最后春招的机会。
9。我想拿优秀证书,要怎么申请?
答:首先确认自己有获得合格证书的资格,并且申请合格证书。在此基础上,参加一场当年的PAT甲级考试。获得70分及以上者,用你在MOOC上注册用的邮箱发邮件到 chenyue@zju.edu.cn,报上自己的身份证、准考证、证书编号,审核通过即可获得优秀证书。