课程

中国大学MOOC,为你提供一流的大学教育

hi,小mooc
期末考试会员
SPOC学校专有课程
数据结构
第5次开课
开课时间: 2024年08月31日 ~ 2025年01月24日
学时安排: 6-10小时每周
当前开课已结束 已有 119 人参加
老师已关闭该学期,无法查看
spContent=怎样提升编程实力?如何玩转人工智能、大数据等热门技术?先来搞定数据结构吧。数据结构是计算机学科中最基本的一种内功心法,掌握好计算机求解问题过程中数据的组织和处理方法,才能更好理解千变万化的高阶招式。我们的特色是从生活实例引入,结合实际应用,图文并茂,由浅入深,重实践,轻理论推导。
怎样提升编程实力?如何玩转人工智能、大数据等热门技术?先来搞定数据结构吧。数据结构是计算机学科中最基本的一种内功心法,掌握好计算机求解问题过程中数据的组织和处理方法,才能更好理解千变万化的高阶招式。我们的特色是从生活实例引入,结合实际应用,图文并茂,由浅入深,重实践,轻理论推导。
—— 课程团队
课程概述

    数据结构课程不仅是计算机、人工智能等专业的重要基础课程,也是通讯、电子、数学、统计等相关学科的必修课。它是程序设计课程的进阶篇,其中所涵盖的理论知识和技术方法,以及在数据抽象能力、编程实践能力等方面所提供的训练,是学习算法设计、机器学习、操作系统、编译、数据库等后继课程的必备前提,也可为从事科研或大型工程项目的实际研发打下坚实的基础。


教学内容

    本课程主要探讨计算机求解问题过程中相关数据的组织和处理方法,具体可分为3个部分:

第1章综述数据、数据结构、抽象数据类型、算法及其时空效率等基本概念和通用分析方法;

第2章到第7章从逻辑结构、存储结构和基本操作的设计与实现这3个层面分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本数据结构类型及其应用;

第8章和第9章讨论查找和排序的各种实现方法,并从时间和空间上进行了定性或定量的分析和比较。

       本课程的内容选取和章节编排主要依据清华大学严蔚敏教授编著的《数据结构(C语言版)》,并参考了计算机学科硕士研究生招生考试大纲。


课程特点

    对每一种经典的数据结构,我们先从大家熟悉的日常生活实例引入,再结合具体实例,配合生动直观的图示或动画,由浅入深地导出它们的定义、存储实现方法以及基本操作算法的思想,并在视频中逐一详解算法实现细节,帮助大家轻松入门。对于比较复杂的算法,我们还会通过具体示例来演示和细致讲解算法执行过程及设计原理,帮助大家更好地理解其精髓。

    我们还准备了丰富的综合应用案例,并从各类考试和面试真题中精心筛选出一些同步练习题以及OJ编程实训题,帮助大家加深对理论知识的感性认知,轻松掌握数据的各种常见组织和处理方法,并能针对具体问题选择合适的数据结构,提升实际编程能力。

       本课程团队成员均为从事数据结构课程教学的一线教师,教学经验丰富,会及时为大家答疑解惑。


选课建议

       本课程可与线下课堂教学相结合,用于计算机、电子、数学等学科相关专业学生的《数据结构》、《算法导论》、《软件技术基础》等相关课程的课前预习、混合教学、反转教学或课后复习;也适用于有信息类求职或深造需要的专业或转专业人员、相关领域的科研或工程技术人员按需补习或参考,以及有编程基础的AI或IT爱好者在线自主学习。

授课目标

Level 1:建立计算机中数据组织方式和数据处理流程上的正确概念;

Level 2:了解各种常用数据结构的特点、适用范围,并初步掌握一些基本的算法效率定性和定量分析方法;

Level 3:针对具体的应用背景和需求,对比并选取合适的数据结构及实现方式,并能预估其时空效率,提高实际应用能力;

Level 4:对较复杂的实际问题进行分析建模,综合运用所学的理论、方法和技术,选择或设计并实现合适的数据结构、存储实现及相应操作集,并能对其时空效率进行正确评价,提高算法设计及程序开发能力,培养创新能力。

成绩 要求


    成绩登记采用百分制,最终成绩中平时成绩25%、实验成绩占20%、期中考试成绩占20%、期末考试成绩占35%。

  • 平时成绩由课堂表现、作业、在线学习成绩等组成。其中,在线学习成绩占10%,以中国大学慕课SPOC在线学习成绩为主;课堂表现和作业占15%,课堂表现由课堂小测、课堂讨论及汇报等成绩组成。
  • 实验成绩由PTA各实训习题集得分及综合设计得分组成。
  • 期中和期末考试均采用闭卷笔试,并增设上机考试环节。
课程大纲

第一周 绪论

1.1 什么是数据结构

1.2 数据结构的基本概念(一)——逻辑结构

1.2 数据结构的基本概念(二)——物理结构

1.3 抽象数据类型

1.4 什么是算法

1.5 算法的分析与度量

第1周实验课课件

第一周 绪论 单元测验

第一章 习题选讲

课堂练习(慕课堂)选讲

随堂测验选讲

单元测验选讲

第1周第1次课作业选讲

第二周 线性表

2.1 线性表的定义(一)——概念和ADT

2.1 线性表的定义(二)——合并与归并

2.2 顺序表

2.3 线性链表(一)——单链表

2.3 线性链表(二)——静态链表

2.4 循环链表和双向链表

2.5 顺序表与线性链表的比较(一)——顺序表与链表

2.5 顺序表与线性链表的比较(二)——各种链表的对比

2.6 一元多项式的表示及运算

第二周 线性表 单元测验

第二章 习题选讲

课堂练习(慕课堂)选讲

随堂测验选讲

单元测验选讲

第三周 栈和队列

3.1 栈的定义与实现

3.2 栈的应用举例(一)——数制转换、括号匹配、行编辑器

3.2 栈的应用举例(二)—迷宫求解

3.2 栈的应用举例(三)—表达式求值

3.3 栈与递归的实现(一)——递归的定义

3.3 栈与递归的实现(二)——递归的实现

3.4 队列的定义与实现(一)——定义和链队列

3.4 队列的定义与实现(二)——循环队列和双端队列

第三周 栈和队列 单元测验

第三章 习题选讲

随堂练习(慕课堂)选讲

第四周 串

4.1 串的定义

4.2 串的表示和实现

4.3 串的模式匹配算法(一)——朴素算法

4.3 串的模式匹配算法(二)——KMP算法

4.3 串的模式匹配算法(三)——KMP算法(续)

4.4 串的应用举例

第四周 串 单元测验

第五周 数组和广义表

5.1 数组的定义及顺序存储

5.2 矩阵的压缩存储(一)——特殊矩阵

5.2 矩阵的压缩存储(二)——三元组顺序表

5.2 矩阵的压缩存储(三)——行逻辑链接的顺序表

5.2 矩阵的压缩存储(四)——十字链表

5.3 广义表

第五周 数组和广义表 单元测验

第五章 习题选讲

随堂练习(慕课堂)选讲

第六周 树和二叉树(上)

6.1 树的定义

6.2 二叉树(一)——定义和性质

6.2 二叉树(二)——存储结构

6.3 二叉树的遍历(一)——递归算法

6.3 二叉树的遍历(二)——非递归算法

6.3 二叉树的遍历(三)——应用

第六周 树和二叉树(上) 单元测验

第七周 树和二叉树(下)

6.4 线索二叉树(一)——基本概念及查找方法

6.4 线索二叉树(二)——遍历及线索化

6.5 树和森林(一)——树的存储结构

6.5 树和森林(二)——与二叉树的转换及遍历

6.6 赫夫曼树及其应用(一)——基本概念及编码、译码方法

6.6 赫夫曼树及其应用(二)——存储及算法实现

6.6 赫夫曼树及其应用(三)——存储及算法实现(续)

第七周 树和二叉树(下) 单元测验

第八周 图(上)

7.4 图的连通性

7.5 最小生成树(一)——Prim算法

7.5 最小生成树(二)——Kruscal算法

7.1 图的定义

7.2 图的存储结构(一)——数组表示法、邻接表

7.2 图的存储结构(二)——十字链表、邻接多重表

7.3 图的遍历

第八周 图(上) 单元测验

第九周 图(下)

7.6 拓扑排序

7.7 关键路径(一)——基本概念及事件最早发生时间

7.7 关键路径(二)——事件最迟发生时间及关键活动

7.8 最短路径(一)——Dijkstra算法

7.8 最短路径(二)——Floyd算法

第八周 图(下) 单元测验

第十周 查找(上)

8.1 查找的基本概念

8.2 顺序表的查找

8.3 有序表的查找

8.4 索引顺序表的查找

8.5 二叉排序树(一)——基本概念及查找、插入

8.5 二叉排序树(二)——删除及性能分析

8.6 平衡二叉树(一)——基本概念及调平衡方法

8.6 平衡二叉树(二)——插入及性能分析

第十周 查找(上) 单元测验

第十一周 查找(下)

8.7 B_树(一)——基本概念及查找

8.7 B_树(二)——插入及删除

8.8 B+树

8.9 哈希表(一)——基本概念

8.9 哈希表(二)——哈希函数的构造方法

8.9 哈希表(三)——冲突处理方法

8.9 哈希表(四)——查找及性能分析

第十一周 查找(下) 单元测验

第十二周 排序(上)

9.1 排序的基本概念

9.2 插入排序(一)——直接插入、折半插入

9.2 插入排序(二)——shell排序

9.3 交换排序

9.4 选择排序(一)——简单选择、树形选择

9.4 选择排序(二)——堆排序

第十二周 排序(上) 单元测验

第十三周 排序(下)

9.5 归并排序

9.6 基数排序(一)——多关键字排序、基数排序

9.6 基数排序(二)——链式基数排序

9.7 各种内部排序方法的比较

第十三周 排序(下) 单元测验

21级大作业成果展示(选做)

2301董若含、李钰媛:数据结构难点(KMP算法&平衡二叉树调整)创新讲解

2302连国鑫、杜一杰:KMP新的实现方式

2303李少伟、苏焜耀、宋轶博:讲解单源点和多源点最短路径问题

2304方晨鑫、杜彧铉、赖博恺:红黑树的讲解和动画演示

2305洪永冠、杨添壹、黄家宏:讲解红黑树的插入和删除

2306马承乾、李亚轩、金为轩、李聪:排序算法的可视化

2311李思远、陈锦豪、方玥:个人信息查找系统

2312桂思敏、陈彦希、宋俏卓、曾钰颖:图书管理系统

2313林婕妤、蔡昕悦、陈中慧:图书管理系统

2314徐诗韵、孙竞洋、石涵玉、王琪芸:学生选课系统程序设计

2315徐烨玮、张一猛、叶俊彤:交通出行查询系统

2316林铭烽、刘丁铭:旅游资讯系统

2317彭勇强、杜佳宝、李昌盛、刘昕霖:校园浏览器

2318赵祥宇、赖锦标:校园地图导游

2319宋俏卓:校园导航系统

2321杨俊琪、何梦环、林藍颖、安润蕊:贪吃蛇(双端队列)

2322刘俊源、杨灿:K近邻算法实现音乐情感识别

2323刘睿哲:利用树构建WBS模型并生成最优工作安排

22级综合设计成果展示(选做)

2509翟晨熹、张苏洛岩、寇怀佳:双人飞机大战

2507王思越、詹熙越、丁文淇:弹球小游戏

2502王爱元、赵香爱、邓凯旋:五子棋博弈

2517祁芷桐、王锦龙:五子棋

2508王晨宇、许逸涵、李明泽:矿井逃生

2510王庆翼、许子昀、陈天朗:俄罗斯方块

2523吕鸿绅、廖军、陈征元:学生选课系统

2518凌浩博、李泽涛、刘文韬:坤鸡找篮球

2519廖哲:课表管理

2511唐浩天、孙冒哲:俄罗斯方块

2514王晓敏、朱倩茹:图的算法可视化

2512徐勉、施鑫:停车场管理系统

2503刘艺嘉、曾远择、郑永涵:教务系统

2506李坤泉:基于哈夫曼编码的文件压缩和解压缩

2520史英琦、李宇航、李嵘钰:病毒贪吃蛇sfml

2505黄培杰、谢志铭:俄罗斯方块

2501褚皓程、康天行健、郑凯航:寻路

2504蔡成茂、郑阳钦:扫雷小游戏

2515何昊康、候博阳:中国象棋

2513李嘉乐、张嘉怡、杨帅祥:决策树模型

2524关远航:unity游戏

展开全部
预备知识
  • 学过一门编程语言,具有一定的编程基础

Python、Java或者C#等语言的编程思路与C/C++语言是相通的,数据结构本质上是不依赖于编程语言的,并且本课程所使用的编程练习平台可以接受多种语言代码的提交。

  • 离散数学及概率论的一些初步知识

离散数学的相关基础知识有助于更好地深入理解本课程的内容,概率的初步知识主要用于算法时空效率的定量分析。


参考资料
  1. 严蔚敏、吴伟民编著,数据结构(C语言版),清华大学出版社,2007年
  2. 邓俊辉编著,数据结构(C++语言版)(第3版),清华大学出版社,2013年
  3. 张铭,王腾蛟,赵海燕编著, 数据结构与算法,高等教育出版社,2008年

课程编程练习平台:

    拼题A,全称“Programming Teaching Assistand”,网址:https://pintia.cn

目前用 Chrome 浏览器或火狐浏览器浏览效果最佳;IE 浏览器以及使用 IE 内核的 360 浏览器等存在由缓存引起的显示问题)

厦门大学
1 位授课老师
郑旭玲

郑旭玲

助理教授

下载
下载

下载App