SPOC学校专有课程
数据结构
分享
spContent=学了一门编程语言不知道能干啥?来学数据结构就对啦! 学会编程相当于会砌猪圈的泥瓦匠,学完数据结构就会盖个双层小楼啦~ 同时还可以一窥构筑摩天大厦的奇门武功! 欢迎勤奋的小白活泼乱入!十二周修炼,得入门径,一代大侠,从此出发 —— 快来吧~ ^_^
—— 课程团队
课程概述

 

    “数据结构”是计算机科学与技术专业、软件工程专业甚至于其它电气信息类专业的重要专业基础课程。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其它课程,还是对从事大型信息工程的开发,都是重要而必备的基础。

    程序设计解决问题往往有多种方法,且不同方法之间的效率可能相差甚远。程序的时间和空间效率,不仅跟数据的组织方式有关,也跟处理流程的巧妙程度有关。本课程将介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助学员学会数据的组织方法和一些典型算法的实现,能够针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。

    注意:本课程只涉及最基础的数据结构和与之关联的最基本的算法,更多更复杂的数据结构和经典的解决优化问题的算法,将在后续课程中介绍。

    本课程的特点是,对每一种重要的经典数据结构,我们都会从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。为了兼顾起点不同的学员,课程中特意设计了“小白专场”系列,手把手教授如何将解决问题的抽象算法用具体的代码实现,从而引导初学者更好地入门。


授课目标

1通过对数据结构的常用数据处理技术和算法的学习,掌握算法性能评价方法,能认识到问题可能有多种解决方案,并能通过搜集、整理知识寻求可替代和备用的解决方案。(支撑毕业要求2.3

2、能够针对行业应用软件的特定需求,运用常用数据结构方法工程思想,将与问题相关的数据组织起来,选择和设计适当的数据结构实现计算过程,编写算法并设计测试用例。(支撑毕业要求3.2

3能够针对行业应用软件的实际问题,进行数据和接口设计,并在设计中体现创新意识。(支撑毕业要求3.3

4、能够将算法和数据结构结合,根据实验方案编写能运行的正确的软件系统,获得符合实际要求的结果,并进行严格有序的测试,正确收集测试结果。(支撑毕业要求4.3


成绩要求

   

这门课的一个重要目的是,帮助大家明白一些经典的数据结构为什么存在、以及在什么情况下可以最好地解决什么样的问题。要做到这一点,非自己动手解决问题不可。

本课程是线上线下混合式教学,所有课堂活动(签到、抢答、讨论等)都在“中国大学MOOC”的“慕课堂”上完成并积分,课堂活动积分将作为最终成绩的一部分。

与程序设计课程类似,课后留有两类练习,一类是在线完成的选择、判断或填空题,以下称作“小测验”;一类是在配套练习网站 拼题A(pintia.cn) 上的编程实验及实验报告,以下称作“实验”。你需要自己在拼题A注册帐户,加入我的班级。可以随时进行练习,并不限于上课时段。

   注意:

  • 你的拼题A账号必须加入我的班级(进入拼题A用户名下的“个人中心”,从个人中心里进入“我的绑定”,选择“绑定新学号”,输入单位(湘潭大学)、绑定码(635247)、姓名、学号,加入我的班级用户组。)

  • 如果忘记帐号或密码,可以用你注册的电子邮箱找回。



课程过半时,我们会安排一次上机完成的期中考试集中、闭卷形式,时长120分钟

最后,在课程结束后,我们会安排一次期末考试。期末考试是集中、闭卷形式,时长120分钟。


本课程的最终期评成绩,由以下因素决定:

1. 期末考试:得分占总评分数的50%;

2. 期中考试:得分占总评分数的10%;

3. 小测验:得分占总评分数的10%;

4. 实验:得分占总评分数的15%;

5. 课堂活动:得分占总评分数的15%;


    

课程大纲
预备知识

    学过一门编程语言,具有一定编程基础,即可理解主要内容,因为数据结构本质上是不依赖于编程语言的,且编程练习平台可以接受二十余种语言代码的提交。但由于算法描述多用类似C语言的伪码,且“小白系列”仅讲解C语言的算法实现,所以如果学过C语言会更容易接受。

    如果还对计算机处理离散结构的基本理论和方法有较为系统的理解(即预修“离散数学”),则对更扎实地掌握本课程内容有很大帮助,但并不是必须的。


参考资料

推荐教辅和资料:

 

1《数据结构》(第2版)陈越、何钦铭、徐镜春、魏宝刚、杨枨 编著,高等教育出版社,2016年6月

2《数据结构学习与实验指导(第2版)》陈越、何钦铭、徐镜春、魏宝刚、杨枨 编著,高等教育出版社,2019年7月

3.《数据结构与算法分析:C语言描述(原书第2版)》,Mark Allen Weiss著,冯舜玺译,机械工业出版社

4. 课程练习网站:

  • 拼题A(Programming Teaching Assistant):https://pintia.cn/ 

  • 本课程的编程练习将在这里布置。

5. 可视化网站 : 

  •       《数据结构》视觉化学习实践平台:https://47.97.34.244/#/  

  • 可以提供本课程常用的数据结构和算法的视觉化演示。

常见问题


1。我不是计算机专业的,能学这门课吗?

答:只要会写程序就能学。

2。我数学不好,能学这门课吗?

答:会算术就可以了…… 有个别例子涉及基础数学概念(比如什么是多项式),花一分钟上网搜索一下定义就可以搞定。

3。我不会写程序,能学这门课吗?

答:不能…… 还是先学会写程序再说吧~ 隔壁翁恺老师的C语言讲得很好懂,推荐~

4。学这门课每周要花多少时间?

答:平均4-8小时,开始可能轻松一点,后面的课业会越来越重 —— 这样你才能长进嘛~ 建议开课前先去拼题A做一下课前自测题集。

5。为什么我的程序在自己机器上跑得好好的,提交到拼题A网站就各种错误?

答:因为你自己用于测试自己程序的数据太弱了同学…… 另外一定注意严格按照题目要求输出结果,不要输出如“Please input ...”之类的多余信息。要用标准输入输出,不要从文件读写。不要急,想想ACM竞赛的世界冠军们也是这样哭着走过来的,心理就平衡了~

6。拼题A的测试数据能不能公布呀?

答:不能。公布数据后一定会有人直接打印结果的…… 不过,如果在某组数据上卡了比较长的时间,可以到论坛上哭诉,老师会在一段时间后打开那组数据的提示信息。



拼题A常见问题及解答


评分

试题的解答提交后由评分系统评出即时得分,每一次提交会判决结果会及时通知;系统可能的反馈信息包括:

结   果说   明
等待评测 评测系统还没有评测到这个提交,请稍候
正在评测 评测系统正在评测,稍候会有结果
编译错误 您提交的代码无法完成编译,点击“编译错误”可以看到编译器输出的错误信息
答案正确 恭喜!您通过了这道题
部分正确 您的代码只通过了部分测试点,继续努力!
格式错误 您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
答案错误 您的程序未能对评测系统的数据返回正确的结果
运行超时您的程序未能在规定时间内运行结束
内存超限 您的程序使用了超过限制的内存
非零返回 您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0
段错误 您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
浮点错误您的程序运行时发生浮点错误,比如遇到了除以 0 的情况
内部错误 评测系统发生内部错误,无法评测。工作人员会努力排查此种错误



常见问题

*我应该从哪里读输入,另外应该输出到哪里?

如果没有特别说明,你的程序应该从标准输入(stdin,传统意义上的“键盘”)读入,并输出到标准输出(stdout,传统意义上的“屏幕”),不要使用文件做输入输出。由于系统是在你的程序运行结束后开始检查输出是否是正确的,对于有多组测试数据的输入,可以全部读入之后再输出,也可以处理一组测试数据就输出一组。


*为什么我的程序交在这里得到编译错误,而我在自己的机器上已经编译通过了?

本系统所使用的编译器和你在自己机器上使用的可能有区别,请留意几个常见的地方:

  • 本系统是 64 位 Linux 系统,使用的编译器版本和编译参数可以参见编译器帮助

  • Java 代码需使用 Main 作为主类名

  • Visual C++ 6.0 和 Turbo C++ 3.0 (及它们的更低版本)有较多违背 C++ 标准(ISO/IEC 14882)的地方,不要使用它们来判断 C++ 程序语法上是否有问题

  • C++ 下 64 位整数的类型是 long long,不要使用 __int64


*为什么我的程序得到了“返回非零”?

  • 返回零表示一个程序正常结束,如果没有返回零,则系统认为程序没有正常结束,这时即便输出了正确的内容也不予通过。

  • C 或 C++ 代码请确认 int main 函数最终会返回 0,不要声明为 double main 或者 void main

  • 有异常的语言,请确认程序处理了可能抛出的异常


*程序的时间和内存占用是如何计算的?

程序的运行时间为程序在所有 CPU 核占用的时间之和,内存占用取程序运行开始到结束占用内存的最大值。

*为什么同样的程序运行时间和所用内存会不同?

程序运行时间会受到许多因素的影响,尤其是在现代多任务操作系统以及在使用动态库的情况下,多次使用同一输入运行同一程序所需时间和内存有一些不同是正常 现象。我们的题目给出的运行限制一般为标准程序的若干倍,也就是说,选用正确的算法和合适的语言,那么运行限制是富余的。

*不同语言的时间限制和内存限制是相同的吗?

是相同的,我们认为选择合适的编程语言也是一项必备技能,所以没有为不同语言设置不同的限制条件。

*我提交的代码可以做什么,有什么限制吗?

没有。这里没有系统调用白名单,也没有针对语言限制可使用的包或库。虽然我们比较宽容大度,但还是请不要做不符合道义的事情。如果你需要使用我们系统没有提供的某个语言的某个库,或者需要更改编译参数,可以联系我们。

其他问题

在考试或比赛中遇到其他问题请咨询现场工作人员。