SPOC学校专有课程
数据结构
分享
spContent=如果说C语言只教您基本驾驶(编程)技术,那么数据结构课程则教您漂移、飞跃、侧驶…(编写高质量程序),和挑选、修理、改装、设计汽车。数据结构课程就像杂草丛中的青蒿,庄稼地里的红高粱,说不定因此给您带来“诺贝尔”奖,助您从生(学生)到猿(程序员),从猿到狮(算法大师)。
—— 课程团队
课程概述


我们生活的现实世界中所有物质都可以抽象为数字、文字、声音、图像和视频,这些数据存储在计算机中,构成了信息世界,经过处理后又服务于我们社会生活的方方面面。计算机科学是一种创造性思维活动,其教育必须面向设计。数据是表征客观事物的可记录可识别符号集合。数据是信息处理的核心基础.数据结构和算法是计算机科学的基石,贯穿了分析问题解决问题的计算思维。

数据结构作为学科的专业基础核心课程,对应于学科中问题求解的理论、抽象和设计的方法论,在学科知识体系中具有核心的重要位置。课程一般开设在二年级,应对前面学习的软件技术总结提高,为后续专业课程提供基础,培养基本数据结构分析能力和综合程序设计实现能力,体现着创造性思维的信息素质培养过程,是计算机科学与技术人才素质框架中的脊梁骨。它承上启下,贯通始终,对学生能力培养至关重要,受益终身。

数据结构及其处理算法是设计与实现系统软件和大型应用软件的重要基础,数据结构与算法课程是计算机专业重要的专业技术基础课程。该课程的内容对于培养学生的计算思维、系统分析与设计、算法设计与分析、程序设计与实现等学科基本能力非常重要。本课程系统地介绍了软件开发中常用的数据结构以及相应的 存储结构和操作算法,包括常用的查找技术、排序技术、递归技术等。

掌握数据结构中的基本概念、合理组织数据的基本方法、高效处理数据的 基本算法、常用的经典算法、通用的程序设计技术,以及面对实际问题时选择恰当数据结构并设计高效算法的能力,培养学生用计算思维分析问题的能力,提高学生 上机解决较大规模实际问题的能力,为进一步的软件开发打下坚实的基础。

1.课程体系

课程突出数据组织方法与实现技术构成,慕课约26个学时,由基本概念、基本结构(线性、树、图)和基本技术(查找、排序)三大部分组成。基本概念部分重点讲述数据结构定义、内容、方法、评价以及前续基础与课程要求,明确数据结构什么、学什么、怎么学数据结构。基本结构部分重点讲述线性结构、树、图的逻辑结构、存储结构及其加工处理基本算法。基本技术部分包括查找和排序两类经典技术,贯穿了参数传递、指针处理技术、数组应用、递归与队列等重要的程序设计技术;力求表现经典算法思路,为学习者继续展拓提供线索。M课视频每讲均附有小结,每章均有典型题例,便于总结提高。

2.教学团队

本课程慕课主讲人是国家教学名师耿国华教授,她主讲数据结构课程30余年,主持建设了《数据结构》国家精品课程与国家精品资源共享课程。

3.课程特点

数据结构的学习过程是进行复杂程序设计的训练过程。技能培养的重要程度不亚于知识传授。难点在于让学生理解、习惯、掌握构造思维算法方式。针对《数据结构》技术性与综合性较突出的特点,耿教授倡导实施了“指导—大运动量实践—反馈”教学法。通过作业练习、课堂练习、课程实习、课程设计实践过程,促进了学生逻辑抽象能力的培养。

4.课程定位

“数据结构与算法”是计算机学科的重要骨干基础课程,是本科教学的重中之重。作为计算机学科一个重要的分支,“数据结构与算法”课程涉及构筑计算机求解问题过程的两大基石:刻画实际问题中信息及其关系的数据结构和描述问题解决方案的逻辑抽象的算法。

让我们一起进入数据结构课程的学习,共同提高计算思维能力。




图1 “数据结构与算法”知识体系图



2“数据结构与算法”与其他课程的关系

授课目标

   通过本课程的教学,使学习者懂得数据结构的一般原理,掌握表、树、图等基本结构的特点,学会对算法的评估方法。培养学习者的算法设计能力、程序设计能力,以及用软件方法处理问题的能力,培养学习者的分析、对比、归纳、综合和创新能力,为后续学习专业课程,设计系统程序打下坚实的理论基础。

成绩要求

成绩构成:

    单元测试:20%

    作业:15%

    期末考试:50%

    课程参与度:15% (根据在学习者在“课堂讨论区”中发贴和回贴的数量确定)


课程大纲
预备知识

   学生应具备一定的程序设计基础;数据结构的主要逻辑结构是线性表、树、图,因此应该先修离散数学,尤其是图论;在算法效率分析中,需要运用初步概率知识,因此学生应该具备一定的概率论基础。



参考资料
  1. 耿国华等,《数据结构-C语言描述(第2版)》,高等教育出版社,2015.7

  2. 耿国华等,《数据结构-C语言描述》及随附教学光盘,高等教育出版社,2011.6

  3. 严蔚敏等,《数据结构(C语言版)(第2版)》,清华大学出版社,2015.2


辅助学习资源:

国家精品资源课共享网址:https://www.icourses.cn/sCourse/course_4246.html 



常见问题


Q1:你的数据结构课程为什么说采用C/C++语言来描述算法?

A:本课程的算法主要采用C语言面向过程方式来描述的。由于纯C语言中调用函数时,只有实参到形参的单向值传递,算法设计不方便简洁,而C++语言中提供了引用运算符(&)可以方便地实现实参和形参的双向传递。这里说采用C/C++语言来描述算法,实际上仅仅使用了C++语言中的引用运算符,其他都是采用纯C语言的知识。

 

Q2:你的数据结构课程为什么不采用C++面向对象方法来描述算法?

A:采用C++面向对象方法可以更加完美地描述算法,但考虑到绝大部分在校学生学习数据结构课程时,仅仅学习过C语言,还没有学习过C++面向对象程序设计,所以本课程主要采用C语言面向过程方式来描述算法。

 

Q3:数据结构课程的上机实验采用什么编译器?

A:如果采用C/C++语言描述算法,可以采用Visual C++ 6.0Dev C++Borland C++或者Visual Studio .NETC/C++语言编译器上机实验。由于算法中采用引用运算符(&),所以不适合采用Turbo C 2.0(或者更低版本)编译器。

 

Q4:数据结构课程和算法设计与分析课程有什么不同和联系?

A:数据结构课程主要学习各种数据结构,其算法设计是围绕各种数据结构展开的。而算法设计与分析课程学习更通用的算法设计方法,即算法策略,如动态规划、贪心法和分支限界法等。

 

Q5:数据结构课程中讲解哪些数据结构?

A:数据结构课程中讲解的数据结构从逻辑结构上分为线性结构、树形结构和图三类。线性结构包括线性表、栈和队列等,树形结构包括树和二叉树等。

 

Q6:数据结构中的算法为什么需要用计算机语言描述出来?

A:从理论上讲,算法可以用自然语言、伪码和计算机语言来描述。但一个学习计算机的学生,应该熟练使用计算机语言(如C/C++)来描述算法。如同一个英语专业的学生,必须能够用英语思考问题并表达。学会并熟练采用计算机语言描述算法就是从计算机的角度来求解问题。

 

Q7:如何学好数据结构课程?

A:这个问题的回答既简单又困难,用我在《数据结构简明教程》中的作者寄语来回答吧:“老师教给我们的是知识,而解决问题需要能力,能力是个性化的,只有通过自已的实训才能得到。对于一个学计算机专业的学生,只有编写和调试n多的程序,才会获得程序设计的能力,继而具备初步的软件设计和开发基础,别无它法。只想听几堂课而不经过大量课外研习和上机实践就想获取这种“能力”是不可能的。”

 

Q8:我不会写程序,能学这门课吗?
A不能…… 还是先学会写程序再说吧~ 隔壁罗烨老师的C语言讲得很好懂,推荐~

 Q9:学这门课每周要花多少时间?
A平均4-8小时,开始可能轻松一点,后面的课业会越来越重 —— 这样你才能长进嘛~