spContent=学了一门编程语言不知道能干啥?来学数据结构就对啦!
学会编程相当于会砌猪圈的泥瓦匠,学完数据结构就会盖个双层小楼啦~ 同时还可以一窥构筑摩天大厦的奇门武功!
—— 课程团队
课程概述
“数据结构”是电子信息类专业和计算机科学与技术专业的重要专业基础课程。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其它课程,还是对从事大型信息工程的开发,都是重要而必备的基础。
程序设计解决问题往往有多种方法,且不同方法之间的效率可能相差甚远。程序的时间和空间效率,不仅跟数据的组织方式有关,也跟处理流程的巧妙程度有关。本课程将介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助学员学会数据的组织方法和一些典型算法的实现,能够针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。
本课程的特点是,对每一种重要的经典数据结构,我们都会从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。
授课目标
通过课程的学习,使学生掌握数据组织、存储和运算的基本原理和方法,培养学生从问题入手,分析研究计算机加工的数据对象的特性,为应用所涉及的数据选择适当的逻辑结构、存储结构、基本运算及相应的算法,并通过复杂程序设计的训练,提高程序设计能力,为后续课程的学习以及软件设计水平的提高奠定基础。
成绩要求
这门课的一个重要目的是,帮助大家明白一些经典的数据结构为什么存在、以及在什么情况下可以最好地解决什么样的问题。要做到这一点,非自己动手解决问题不可。
与程序设计课程类似,每一周的课后,我们都留有两类练习,一类是在线完成的选择、判定题,称作“单元测验”;一类是在拼题A 上的编程练习,以下称作“单元作业”。你可以自己注册帐户,随时进行练习,并不限于发布练习的时段。
注意:你的拼题A账号所用的电子邮箱必须与中国大学MOOC的账号进行绑定(同时在两个窗口登录拼题A和中国大学MOOC,进入拼题A用户名下的“个人中心”找“我的绑定”,点击“绑定中国大学MOOC”即可);
你需要在“个人中心”的“个人信息”中输入邀请码,应邀做题。本学期的邀请码为:a9d2cec0f18aa47c。
如果忘记帐号或密码,可以用你注册的电子邮箱找回。
课程过半时,我们会安排一次在线期中考试,采用在线完成的选择、是非或填空题,不包括编程题。期中考试在一周内用连续的60分钟完成均有效。
课程结束时,我们会安排一次在线期末考试,需要在某一天内用连续的120分钟完成。
课程大纲
预备知识
学过一门编程语言,具有一定编程基础,即可理解主要内容,因为数据结构本质上是不依赖于编程语言的,且编程练习平台可以接受二十余种语言代码的提交。但由于算法描述多用类似C语言的伪码,且“小白系列”仅讲解C语言的算法实现,所以如果学好C语言会更有助于课程的掌握。
如果还对计算机处理离散结构的基本理论和方法有较为系统的理解(即预修“离散数学”),则对更扎实地掌握本课程内容有很大帮助,但并不是必须的。
参考资料
推荐教辅和资料:
1.《数据结构(C语言版)》(第2版),严蔚敏,李冬梅等编著,人民邮电出版社,2016年8月
2.《数据结构》(第2版),陈越、何钦铭、徐镜春等编著,高等教育出版社,2016年6月
3.《数据结构学习与实验指导(第2版)》,陈越、何钦铭、徐镜春等编著,高等教育出版社,2019年7月
课程练习网站:
拼题A(Programming Teaching Assistant):https://pintia.cn/ 本课程的编程练习将在这里布置。
常见问题
拼题A常见问题及解答
评分
试题的解答提交后由评分系统评出即时得分,每一次提交会判决结果会及时通知;系统可能的反馈信息包括:结 果说 明等待评测评测系统还没有评测到这个提交,请稍候
正在评测评测系统正在评测,稍候会有结果
编译错误您提交的代码无法完成编译,点击“编译错误”可以看到编译器输出的错误信息
答案正确恭喜!您通过了这道题
部分正确您的代码只通过了部分测试点,继续努力!
格式错误您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
答案错误您的程序未能对评测系统的数据返回正确的结果
运行超时您的程序未能在规定时间内运行结束
内存超限您的程序使用了超过限制的内存
非零返回您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0
段错误您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
浮点错误您的程序运行时发生浮点错误,比如遇到了除以 0 的情况
内部错误评测系统发生内部错误,无法评测。工作人员会努力排查此种错误
常见问题
*我应该从哪里读输入,另外应该输出到哪里?
如果没有特别说明,你的程序应该从标准输入(stdin,传统意义上的“键盘”)读入,并输出到标准输出(stdout,传统意义上的“屏幕”),不要使用文件做输入输出。由于系统是在你的程序运行结束后开始检查输出是否是正确的,对于有多组测试数据的输入,可以全部读入之后再输出,也可以处理一组测试数据就输出一组。
*为什么我的程序交在这里得到编译错误,而我在自己的机器上已经编译通过了?
本系统所使用的编译器和你在自己机器上使用的可能有区别
*为什么我的程序得到了“返回非零”?返回零表示一个程序正常结束,如果没有返回零,则系统认为程序没有正常结束,这时即便输出了正确的内容也不予通过。
C 或 C++ 代码请确认 int main 函数最终会返回 0,不要声明为 double main 或者 void main
有异常的语言,请确认程序处理了可能抛出的异常
*程序的时间和内存占用是如何计算的?
程序的运行时间为程序在所有 CPU 核占用的时间之和,内存占用取程序运行开始到结束占用内存的最大值。
*为什么同样的程序运行时间和所用内存会不同?
程序运行时间会受到许多因素的影响,尤其是在现代多任务操作系统以及在使用动态库的情况下,多次使用同一输入运行同一程序所需时间和内存有一些不同是正常
现象。我们的题目给出的运行限制一般为标准程序的若干倍,也就是说,选用正确的算法和合适的语言,那么运行限制是富余的。
*不同语言的时间限制和内存限制是相同的吗?
是相同的,我们认为选择合适的编程语言也是一项必备技能,所以没有为不同语言设置不同的限制条件。