数据结构(中国海洋大学)
数据结构(中国海洋大学)
3万+ 人选课
更新日期:2025/06/25
开课平台智慧树
开课高校中国海洋大学
开课教师魏振钢高云刘超
学科专业工学计算机类
开课时间2025/01/21 - 2025/07/20
课程周期26 周
开课状态开课中
每周学时-
课程简介
数据结构是计算机程序设计的重要理论技术基础。本课程强调基本数据结构的概念、存储结构的掌握与算法分析、设计的训练,始终以问题为研究对象,按照提出问题、分析问题、解决问题、总结问题的步骤,培养学生运用数据结构的基本理论和算法设计、分析的方法来分析和解决实际问题的能力。
课程大纲

在线教程

章节简介教学计划
绪论
登录后可预览视频
什么是数据结构
魏振钢
基本概念和术语
基本概念和术语(上)
魏振钢
基本概念和术语(下)
魏振钢
抽象数据类型的表示与实现
魏振钢
算法和算法分析
算法
魏振钢
算法设计的要求
魏振钢
算法效率的度量
魏振钢
算法的储存空间 要求
魏振钢
线性表
线性表的类型定义
线性表的类型定义(上)
魏振钢
线性表的类型定义(下)
魏振钢
线性表的顺序表示和实现
线性表的顺序表示和实现(上)
魏振钢
线性表的顺序表示和实现(中)
魏振钢
线性表的顺序表示和实现(下)
魏振钢
线性表的链式表示和实现
线性链表(上)
魏振钢
线性链表(中)
魏振钢
线性链表(下)
魏振钢
循环链表
魏振钢
双向链表
魏振钢
一元多项式I的表示及相加
一元多项式I的表示及相加(上)
魏振钢
一元多项式I的表示及相加(下)
魏振钢
栈和队列
抽象数据类型栈的定义
魏振钢
栈的表示和实现
魏振钢
栈的应用举例
数制转换
魏振钢
括号匹配的检验
魏振钢
行编辑程序问题
魏振钢
迷宫求解
魏振钢
表达式求值
魏振钢
队列
抽象数据类型队列的定义
魏振钢
链队列
魏振钢
循环队列—队列的顺序表示和实现
魏振钢
串类型的定义
串类型的定义(上)
魏振钢
串类型的定义(下)
魏振钢
串的表示和实现
魏振钢
串的模式匹配算法
求子串位置的定位函数
魏振钢
模式匹配的一种改进算法
魏振钢
数组和广义表
数组的定义
魏振钢
数组的顺序表示和实现
魏振钢
矩阵的压缩存储
特殊矩阵
魏振钢
稀疏矩阵(上)
魏振钢
稀疏矩阵(中)
魏振钢
稀疏矩阵(下)
魏振钢
广义表的定义
魏振钢
广义表的存储结构
魏振钢
广义表操作的递归函数
求广义表的深度
魏振钢
复制广义表
魏振钢
建立广义表的存储结构(上)
魏振钢
建立广义表的存储结构(下)
魏振钢
树和二叉树
树的定义和基本术语
魏振钢
二叉树
二叉树的定义
魏振钢
二叉树的性质
魏振钢
二叉树的存储结构
魏振钢
遍历二叉树和线索二叉树
遍历二叉树(上)
魏振钢
遍历二叉树(中)
魏振钢
遍历二叉树(下)
魏振钢
线索二叉树(上)
魏振钢
线索二叉树(中)
魏振钢
线索二叉树(下)
魏振钢
树和森林
树的存储结构
魏振钢
森林与二叉树的转换
魏振钢
树和森林的遍历
魏振钢
赫夫曼树及其应用
最优二叉树
魏振钢
赫夫曼编码
魏振钢
树的计数
魏振钢
图的定义和术语
图的定义和术语(上)
魏振钢
图的定义和术语(中)
魏振钢
图的定义和术语(下)
魏振钢
图的存储结构
数组表示方法
魏振钢
邻接表
魏振钢
十字链表
魏振钢
邻接多重表
魏振钢
图的遍历
深度优先搜索(上)
魏振钢
深度优先搜索(上)
魏振钢
广度优先搜索
魏振钢
图的连通性问题
无向图的连通分量和生成树
魏振钢
最小生成树(上)
魏振钢
最小生成树(中)
魏振钢
最小生成树(下)
魏振钢
有向无环图及其应用
拓扑排序(上)
魏振钢
拓扑排序(下)
魏振钢
关键路径(上)
魏振钢
关键路径(下)
魏振钢
最短路径
从某个源点到其余各顶点的最短路径(上)
魏振钢
从某个源点到其余各顶点的最短路径(下)
魏振钢
每一对顶点之间的最短路径
魏振钢
查找
查找概述
魏振钢
静态查找表
顺序表的查找
魏振钢
有序表的查找
魏振钢
索引顺序表的查找
魏振钢
动态查找表
二叉排序树和平衡二叉树--二叉排序树及其查找过程(1)
魏振钢
二叉排序树和平衡二叉树--二叉排序树及其查找过程(2)
魏振钢
二叉排序树和平衡二叉树--二叉排序树及其查找过程(3)
魏振钢
二叉排序树和平衡二叉树--二叉排序树及其查找过程(4)
魏振钢
二叉排序树和平衡二叉树--平衡二叉树
魏振钢
B-树和B+树(上)
魏振钢
B-树和B+树(中)
魏振钢
B-树和B+树(下)
魏振钢
哈希表
什么是哈希表
魏振钢
构造哈希函数的方法
魏振钢
处理冲突的方法
魏振钢
内部排序
概述
魏振钢
插入排序
直接插入排序(上)
魏振钢
直接插入排序(下)
魏振钢
其他插入排序
魏振钢
希尔排序
魏振钢
快速排序与选择排序
快速排序(上)
魏振钢
快速排序(下)
魏振钢
选择排序(上)
魏振钢
选择排序(下)
魏振钢
归并排序
魏振钢
基数排序
多关键字的排序
魏振钢
链式基数排序
魏振钢
各种内部排序方法的比较讨论
魏振钢
  • 第一章绪论

    数据结构的课程简介、基本概念及术语、抽象数据类型的介绍,以及算法的定义、时间复杂度、空间复杂度的描述

  • 1.1什么是数据结构

    数据结构等基本概念的定义,以及数据结构的各种逻辑结构和存储结构的描述

  • 1.2基本概念和术语

    描述数据结构等基本概念的定义

  • 1.3抽象数据类型的表示与实现

    描述抽象数据类型的定义及表示方法

  • 1.4算法和算法分析

    算法的定义、设计要求、及评价算法的时间复杂度和空间复杂度的度量方法进行描述

  • 第二章线性表

    线性表的定义,线性表的顺序表示及实现,线性表的链式表示和实现,以及用单链表完成一元多项式的表示及相加

  • 2.1线性表的类型定义

    线性表是由n≥0个数据元素组成的有限序列。n=0是空表;非空表,只能有一个开始结点,有且只能有一个终端结点。

  • 2.2线性表的顺序表示和实现

    顺序表是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中。在存储单元中的各元素的物理位置和
    逻辑结构中各结点相邻关系是一致的。地址计算:LOCa(i)=LOCa(1)+(i-1)*d;(首地址为1)
     在顺序表中实现的基本运算:
      •插入:平均移动结点次数为n/2;平均时间复杂度均为O(n)。
        •删除:平均移动结点次数为(n-1)/2;平均时间复杂度均为O(n)。

  • 2.3线性表的链式表示和实现

    采用单循环链表在实用中多采用尾指针表示单循环链表。优点是查找头指针和尾指针的时间都是O(1),不用
    遍历整个链表。
      双链表就是双向链表,就是在单链表的每个结点里再增加一个指向其直接前趋的指针域prior,形成两条不同方
    向的链。由头指针head惟一确定。
      双链表也可以头尾相链接构成双(向)循环链表。
      双链表上的插入和删除时间复杂度均为O (1)。
      顺序表和链表的比较:  •基于空间:
       •顺序表的存储空间是静态分配,存储密度为1;适于线性表事先确定其大小时采用。
    •线性表的链式存储结构中结点的逻辑次序和物理次序不一定相同,为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还存储了其后继结点的地址信息(即指针或链)。这两部分信息组成链表中的结点结构。 
    一个单链表由头指针的名字来命名。

  • 2.4一元多项式I的表示及相加

    如何用链表表示一元多项式,及在此存储结构上如何完成一元多项式的相加。

  • 第三章栈和队列

    栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表,称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。栈的修改是按后进先出的原则进行的,我们又称栈为LIFO表(Last In First Out)。通常栈有
    顺序栈和链栈两种存储结构。

    队列(Queue)是一种运算受限的线性表,插入在表的一端进行,而删除在表的另一端进行,允许删除的一端称      
    为队头(front),允许插入的一端称为队尾(rear) ,队列的操作原则是先进先出的,又称作FIFO表(First In 
    First Out) .队列也有顺序存储和链式存储两种存储结构。

  • 3.1

    栈和队列的抽象类型定义及其顺序存储结构和链式存储的表示及实现,栈的应用举例。

  • 3.2栈的应用举例

    利用栈解决各种经典的应用问题的举例

  • 3.3队列

    队列抽象类型定义,及链队列、循环队列的表示方法

  • 第四章

    串是零个或多个字符组成的有限序列。
      •空串:是指长度为零的串,也就是串中不包含任何字符(结点)。
      •空白串:指串中包含一个或多个空格字符的串。
      •在一个串中任意个连续字符组成的子序列称为该串的子串,包含子串的串就称为主串。
      •子串在主串中的序号就是指子串在主串中首次出现的位置。
      •空串是任意串的子串,任意串是自身的子串。
      串分为两种: •串常量在程序中只能引用不能改变;
      •串变量的值可以改变。
      串的基本运算有: •求串长strlen(char*s)
    •串复制strcpy(char*to,char*from)
     •串联接strcat(char*to,char*from)
     •串比较charcmp(char*s1,char*s2)
    •字符定位strchr(char*s,charc)

  • 4.1串类型的定义

    串(字符串)是由零个或多个字符组成的有限序列。由一对单引号相括,如: ‘a string’

  • 4.2串的表示和实现

    串的定长存储表示方法,及在此结构上串的典型算法的实现方法

  • 4.3串的模式匹配算法

    介绍一般的串的模式匹配算法,在此基础上重点介绍了KMP算法。

  • 第五章数组和广义表

    数组和广义表可以看成是线性表在下述含义上的扩展:表中的数据元素本身也是一种数据结构。

  • 5.1数组的定义

    数组是一个具有固定格式和数量的数据有序集,每一个数据元素有唯一的一组下标来标识,因此,在数组上不能做插入、删除数据元素的操作。通常在各种高级语言中数组一旦被定义,每一维的大小及上下界都不能改变。在数组中通常做下面两种操作:
    (1)    取值操作:给定一组下标,读其对应的数据元素。
    (2)    赋值操作:给定一组下标,存储或修改与其相对应的数据元素。

  • 5.2数组的顺序表示和实现

    对于一维数组按下标顺序分配即可。 对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。

  • 5.3矩阵的压缩存储

    首先介绍了几种特殊矩阵的定义及存储方法,然后描述了稀疏矩阵的定义及三元组的存储方法,及在此存储结构上完成矩阵的转置的算法,最后介绍了稀疏矩阵的其他链式的存储方法。

  • 5.4广义表的定义

    广义表的定义及其抽象数据类型的定义。

  • 5.5广义表的存储结构

    介绍存储广义表的表头、表尾表示法

  • 5.6广义表操作的递归函数

    利用递归函数完成求广义表的深度问题,复制广义表的问题,建立广义表的存储结构的问题。

  • 第六章树和二叉树

    树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。

  • 6.1树的定义和基本术语

    树是n个结点的有限集合,非空时必须满足:只有一个称为根的结点;其余结点形成m个不相交的子集,并称 根的子树。 根是开始结点;结点的子树数称度;度为0的结点称叶子(终端结点);度不为0的结点称分支结点(非终端结 点);除根外的分支结点称内部结点;  有序树是子树有左,右之分的树;无序树是子树没有左,右之分的树;森林是m个互不相交的树的集合;

  • 6.2二叉树

    二叉树及其基本术语的定义,二叉树的基本性质及证明过程,二叉树的顺序存储及二叉链表、三叉链表的存储方法。

  • 6.3遍历二叉树和线索二叉树

    遍历二叉树的三种方法的定义及其实现的递归算法,以及中序遍历的非递归算法,线索二叉树的定义、存储结构、中序线索树的遍历算法、建立中序线索树的算法。

  • 6.4树和森林

    树的双亲表示法、孩子链表表示法、儿子-兄弟链表存储表示方法,森林与二叉树的转换方法,以及树和森林的遍历算法的描述。

  • 6.5赫夫曼树及其应用

    最优二叉树的定义,赫夫曼树的定义、构造方法、赫夫曼编码方法、及其算法描述。

  • 6.6树的计数

    树的计数的定义,二叉树的计数问题,树的计数问题。

  • 第七章

    图的逻辑结构特征就是其结点(顶点)的前趋和后继的个数都是没有限制的,即任意两个结点之间之间都可能相关。

  • 7.1图的定义和术语

    图GraphG=(V,E),V是顶点的有穷非空集合,E是顶点偶对的有穷集。有向图Digraph:每条边有方向;无向图Undigraph:每条边没有方向。 有向完全图:具有n*(n-1)条边的有向图;无向完全图:具有n*(n-1)/2条边的无向图; 有根图:有一个顶点有路径到达其它顶点的有向图;简单路径:是经过顶点不同的路径;简单回路是开始和终端重 的简单路径; 网络:是带权的图。

  • 7.2图的存储结构

    介绍图的4种存储结构,包括数组表示法、邻接表、十字链表、邻接多重表。

  • 7.3图的遍历

    介绍图的两种遍历算法:深度优先搜索和广度优先搜索,并结合上节的存储结构给出算法描述。

  • 7.4图的连通性问题

    首先介绍无向图的连通分量的定义,然后描述最小生成树的定义及其应用,最后重点介绍了生成最小生成树的普里姆算法及克鲁斯卡尔算法。

  • 7.5有向无环图及其应用

    首先描述了有向无环图的定义,然后定义了图的拓扑排序及如何进行拓扑排序的算法,最后定义了AOE网及求取关键路径的算法。

  • 7.6最短路径

    首先讲解了最短路径的概念及其应用,然后讲解了求解单源最短路径的Dijsktra算法,最后讲解了Floyd算法求解每一对定点之间的最短路径。

  • 第八章查找

    查找的定义及分类,静态查找表的存储方式及其查找算法,动态查找表定义和存储方式及其查找、插入、删除的算法,哈希表的定义,构造哈希表的方法,处理冲突的算法。

  • 8.1查找概述

    查找的定义,查找的分类。

  • 8.2静态查找表

    静态查找表的定义及其查找算法,包括顺序表、有序表和索引顺序表的查找算法。

  • 8.3动态查找表

    动态查找表的定义,二叉排序树、平衡二叉树、B-树和B+树的定义、存储结构、查找、插入、删除的算法。

  • 8.4哈希表

    介绍了哈希表的定义、特点、查找效率等,构造哈希函数的方法,处理冲突的方法。

  • 第九章内部排序

    内部排序、外部排序的定义,各种内部排序算法的描述,包括插入排序、选择排序、归并排序、基数排序、及各种内部排序方法的比较讨论等。

  • 9.1概述

    排序、内部排序、外部排序的定义,内部排序的分类。

  • 9.2插入排序

    插入排序的定义,直接插入排序、折半插入排序、希尔排序的算法描述及示例。

  • 9.3快速排序与选择排序

    选择排序的定义,简单选择排序算法、堆排序的算法描述,堆排序包括建堆及筛选的过程

  • 9.4归并排序

    归并排序的定义及算法描述。

  • 9.5基数排序

    基数排序的定义,多关键字的排序方法及算法描述,链式基数排序的方法及算法描述。

  • 9.6各种内部排序方法的比较讨论

    对各种排序算法的稳定性、适合情况、优缺点进行总结和比较。

  • 开始学习
  • 第一章  作业测试
    第一章 绪论

    1.1 什么是数据结构

    1.2 基本概念和术语

    1.3 抽象数据类型的表示与实现

    1.4 算法和算法分析

    视频数8
  • 第二章  作业测试
    第二章 线性表

    2.1 线性表的类型定义

    2.2 线性表的顺序表示和实现

    2.3 线性表的链式表示和实现

    2.4 一元多项式I的表示及相加

    视频数12
  • 第三章  作业测试
    第三章 栈和队列

    3.1

    3.2 栈的应用举例

    3.3 队列

    视频数10
  • 第四章  作业测试
    第四章

    4.1 串类型的定义

    4.2 串的表示和实现

    4.3 串的模式匹配算法

    视频数5
  • 第五章  作业测试
    第五章 数组和广义表

    5.1 数组的定义

    5.2 数组的顺序表示和实现

    5.3 矩阵的压缩存储

    5.4 广义表的定义

    5.5 广义表的存储结构

    5.6 广义表操作的递归函数

    视频数12
  • 第六章  作业测试
    第六章 树和二叉树

    6.1 树的定义和基本术语

    6.2 二叉树

    6.3 遍历二叉树和线索二叉树

    6.4 树和森林

    6.5 赫夫曼树及其应用

    6.6 树的计数

    视频数16
  • 第七章  作业测试
    第七章

    7.1 图的定义和术语

    7.2 图的存储结构

    7.3 图的遍历

    7.4 图的连通性问题

    7.5 有向无环图及其应用

    7.6 最短路径

    视频数21
  • 第八章  作业测试
    第八章 查找

    8.1 查找概述

    8.2 静态查找表

    8.3 动态查找表

    8.4 哈希表

    视频数15
  • 第九章  作业测试
    第九章 内部排序

    9.1 概述

    9.2 插入排序

    9.3 快速排序与选择排序

    9.4 归并排序

    9.5 基数排序

    9.6 各种内部排序方法的比较讨论

    视频数13
  • 期末考试