数据结构与算法知识点总结

71 阅读4分钟

数据结构

  • 线性结构

    • 数组

      • 特点:连续存储,可通过下标快速访问元素,随机访问时间复杂度为 O (1)。插入和删除元素时,若在中间位置操作,需移动大量元素,平均时间复杂度为 O (n)。
      • 应用:常用于存储相同类型数据的集合,如存储学生成绩等。
    • 链表

      • 特点:由节点组成,每个节点包含数据和指向下一节点的指针(双向链表还有指向前一节点的指针)。插入和删除操作只需修改指针,时间复杂度为 O (1)(在已知节点位置的情况下),但随机访问需要从头遍历,时间复杂度为 O (n)。
      • 应用:常用于实现栈、队列等数据结构,在频繁进行插入删除操作的场景有优势。
  • 栈和队列

      • 特点:后进先出(Last In First Out, LIFO)的数据结构,操作主要有入栈(push)和出栈(pop)。可用于表达式求值、函数调用栈等。
      • 实现:可以用数组或链表实现,用数组实现时需注意栈满和栈空的情况。
    • 队列

      • 特点:先进先出(First In First Out, FIFO)的数据结构,操作有入队(enqueue)和出队(dequeue)。常用于任务调度、消息缓冲等。
      • 实现:分为顺序队列和循环队列,循环队列可有效利用数组空间,避免假溢出问题。
  • 非线性结构

      • 特点:具有层次关系的数据结构,每个节点最多有 n 个子节点(n 取决于树的类型)。有根节点、叶子节点、父节点、子节点等概念。常见的有二叉树、二叉搜索树、平衡二叉树等。
      • 应用:用于文件系统目录结构、数据库索引、算法设计(如快速排序、归并排序利用了树的分治思想)等。
      • 特点:由顶点和边组成,可以是有向图或无向图。边可以有权重,表示顶点之间的关系强度或距离等。存储方式有邻接矩阵和邻接表等。

      • 应用:网络路由算法、社交网络分析、地图导航等领域。

算法

  • 排序算法

    • 冒泡排序

      • 原理:多次遍历数组,比较相邻元素大小,若不符合顺序则交换。每一轮遍历都会将一个较大(或较小)的元素移到数组末尾(或开头),时间复杂度平均和最坏情况为 O (n²),最好情况(数据已排序)为 O (n)。
    • 快速排序

      • 原理:通过选择一个基准值,将数组分为两部分,小于基准值的在左边,大于基准值的在右边,然后递归地对左右子数组进行排序。时间复杂度平均为 O (nlogn),最坏情况为 O (n²)。
    • 插入排序

      • 原理:将未排序的元素逐个插入到已排序的部分合适位置。对于接近有序的数据效果较好,时间复杂度平均和最坏情况为 O (n²),最好情况为 O (n)。
    • 归并排序

      • 原理:将数组不断分割成子数组,直到子数组只有一个元素,然后将子数组合并并排序。时间复杂度始终为 O (nlogn),空间复杂度为 O (n)(因为需要辅助数组)。
  • 查找算法

    • 顺序查找

      • 原理:从数组开头逐个元素进行比较,直到找到目标元素或遍历完整个数组。适用于无序数组,时间复杂度为 O (n)。
    • 二分查找

      • 原理:适用于有序数组,每次取中间元素与目标元素比较,根据比较结果缩小查找范围。时间复杂度为 O (logn)。
  • 算法复杂度分析

    • 时间复杂度:衡量算法执行时间与输入规模之间的关系,用大 O 记号表示。常见的时间复杂度有 O (1)(常数级)、O (logn)(对数级)、O (n)(线性级)、O (n²)(平方级)等。
    • 空间复杂度:衡量算法执行过程中所需额外空间与输入规模之间的关系。包括算法本身所需的空间以及临时变量等占用的空间。

(以上内容来自“豆包”大模型)