“数据结构”是所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其它课程,还是对从事大型信息工程的开发,都是重要而必备的基础。
程序设计解决问题往往有多种方法,且不同方法之间的效率可能相差甚远。程序的时间和空间效率,不仅跟数据的组织方式有关,也跟处理流程的巧妙程度有关。本课程将介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助学习者学会数据的组织方法和一些典型算法的实现,能够针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。
本课程的特点:对每一种重要的经典数据结构,我们都会从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学习者增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。
通过课程的学习,使学生掌握数据组织、存储和运算的基本原理和方法,培养学生从问题入手,分析研究计算机加工的数据对象的特性,为应用所涉及的数据选择适当的逻辑结构、存储结构、基本运算及相应的算法,并通过复杂程序设计的训练,提高程序设计能力,为后续课程的学习以及软件设计水平的提高奠定基础。
本课程帮助大家明白理解经典的数据结构为什么存在、以及在什么情况下可以最好地解决什么样的问题。要做到这一点,非自己动手解决问题不可。
每一周的课后,我们都留有两类练习,一类是在线完成的选择、判定题,称为“单元测验”;一类是在拼题A 上的编程练习,称为“单元作业”。
课程结束时,我们会安排一次在线期末考试,需要在某一天内用连续的45分钟完成。
课程学习成绩由以下部分构成:
(1)单元测验:题型为客观题,系统自动批阅给分,占课程成绩的40%。每次测验可进行2次,取最高分。
(2)单元作业:占课程成绩的30%。部分为互评作业,依据作业的完成质量由学生互评给分,要求互评最少个数为5个,未参与互评的学生将给与所得分数的60%;部分为PTA编程作业,依据发布的编程作业完成质量,由PTA系统自动评测给分。
(3)课堂讨论:完成“课堂交流区”版块中的主题讨论,占课程成绩的10%;要求获取满分用户需要在“课堂讨论”中回复的数量至少15个,占课程成绩的10%。
(4)视频学习:按系统记录的视频学习时长由慕课堂统计给分。
(5)课程考试:课程结束后参加课程期末考试,占课程成绩的20%。
学过一门编程语言,具有一定编程基础,即可理解主要内容,因为数据结构本质上是不依赖于编程语言的,且编程练习平台可以接受二十余种语言代码的提交。如果学好C语言会更有助于课程的掌握。
推荐教辅和资料:
1.《数据结构(C语言版)》(第2版),严蔚敏,李冬梅等编著,人民邮电出版社,2021
2.《数据结构》(第2版),陈越、何钦铭、徐镜春等编著,高等教育出版社,2016
3.《数据结构学习与实验指导(第2版)》,陈越、何钦铭、徐镜春等编著,高等教育出版社,2019
课程练习网站: 拼题A(Programming Teaching Assistant),https://pintia.cn/ 本课程的编程练习将在这里布置。
Q:我需要配备什么样的计算机?
A:配备一台台式机或笔记本计算机就可以用于C语言或C++语言编程,操作系统安装常用的Windows即可,同类操作系统均可。
Q:我需要安装什么软件才能做这门课的作业?
A:任何C语言或C++语言的开发工具都,包括如VS2008及以上、CodeBlocks、DevC++等均可。
Q : 可以使用手机学习吗?
A : 目前可以通过手机App观看课程视频、阅读文档、参与测验、作业、讨论、随堂测验等,但视频中的驻点提问、视频外加字幕等,在手机端无法正常显示。由于作业需要手动填写内容,且手机端无法暂存,为保证作业能够顺利提交,建议作业的相关操作在网页端通过电脑进行参与。
Q : 如何进行同伴互评?
A :
(1)提交:你需要准备并提交作业。在提交截止时间前,你可以多次提交作业,如果未能在截止时间前提交,你将因为作业未被评分而失去这部分的分数。提交后请确认是否提交成功(即看到作业已提交的提示信息),而不是仅仅保存了作业。
(2)互评:互评只有在提交截止时间过后才可以开始。因此,即使你提前上交了作业,也必须等待提交截止才能进行同伴互评。在这一阶段,你需要评价一定数量(通常是5份)来自同伴的作业,未参与或为完成互评都会扣除相应的分数。
Q : 同伴互评的成绩是如何得出的?
A : 为了避免同伴打分中出现过高或过低的极端情况,系统将会在同伴所评定的分数中取中位数或者平均数,作为该份作业的最终得分。
Q : 如何参加考试?
A : 进入课程学习页面,点击左侧栏的“考试”,即可参加当前正在开放的考试。
Q:课程需要多编程多实践,在哪里可以进行编程的训练?
A:PTA(https://pintia.cn/ )是本课程的在线测评OJ平台,学习者在线编程, 自动评测、即时反馈,培养学习者编写和优化代码的能力,提升开发应用程序的能力。