数据结构知识点总结之串、数组、广义表

数据结构

本质

  • 内容受限的线性表

    • 数据元素是一个字符

概念

  • 子串

    • 一个字符串中任意一个连续字符组成的子序列
    • 空串是任何字符串的子串
  • 空格串

    • 空格字符组成的字符串
    • 长度为空格字符的数目

模式匹配

  • BF算法

    • 时间复杂度

      • 最好情况下:O(m+n)
      • 最坏情况下:O( m*n)
  • KMP算法

    • next数组计算

    • nextval数组计算

    • 特点

      • 主串指针不需要回溯
      • next数组时间复杂度O(m)

数组

按行存储

按列存储

压缩存储

  • 对称矩阵

    • 存储下三角以及对角线上的元素
  • 三角矩阵

  • 稀疏矩阵

    • 三元组顺序表

      • 三元组

        • row|col|value
      • triElems|maxsize|rows|cols|num

      • 基本操作

        • 转置

          • 关键

            • 矩阵的行数 n 和列数 m 的值交换
            • 将三元组中的 i 和 j 调换
            • 转换之后的表同样按照行序(置换前的列序)为主序,进行排序
          • 简单转置

            • 将矩阵的行数和列数进行调换
            • cols次遍历三元组顺序表,将同一行的元素按顺序转置存放到转置矩阵中
            • 一定程度上节省了空间,但是时间复杂度很高
          • 快速转置

            • cNum:记录原矩阵中每一列的非零元个数
            • cPos:记录每一列第一个非零元在转置矩阵的位置
            • 直接将结果放到转置矩阵对应位置中
      • 提取指定元素都需要遍历整个数组,效率低

    • 行逻辑链接的顺序表

      • 将矩阵中的非 0 元素采用三元组的形式存储到一维数组 data 中
      • 使用数组 rpos 记录矩阵中每行第一个非 0 元素在一维数组中的存储位置
    • 十字链表

      • 三元组+right|down

      • rowHead|colHead|rows|cols|num

      • 行链表与列链表

      • 基本函数实现

        • 取/修改指定位置元素
        • 加法运算

广义表

定义

  • 广义表是线性表的推广,广义表中每个元素可以是原子,也可以是子表,原子即单个元素,而子表是广义表

概念

  • 长度

    • 第一层所含的元素个数
  • 深度

    • max(每个元素深度) + 1

      • 括号深度

存储

  • 链式存储

    • tag|ref/data/hlink|tlink

    • tag

      • tag=0

        • 专用头节点

          • ref:记录该广义表被引用次数
      • tag=1

        • 单元素结点

          • data:存放数据
      • tag=2

        • 子表结点

          • hlink:存放指向子表表头的结点
    • tlink

      • tag = 0时存放指向表头结点的指针
      • 存放指向同一层下一个结点的指针

操作

  • 前提

    • 非空广义表
  • 求表头

    • head(A)
    • 可以为表/空表/单元素值
  • 求表尾

    • 除去表头以外其余元素组成的表,一定是个广义表
    • tail(A)
  • 表头表尾都是空表的广义表

    • 只有一个空的子表的广义表

      • (())
    • 长度1,深度2

应用

  • n元多项式

posted @ 2020-07-08 09:46  wgjmcal  阅读(708)  评论(0编辑  收藏  举报