zoukankan      html  css  js  c++  java
  • 数据结构知识点总结之串、数组、广义表

    数据结构

    本质

    • 内容受限的线性表

      • 数据元素是一个字符

    概念

    • 子串

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

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

    模式匹配

    • 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元多项式

  • 相关阅读:
    二十三、Android源代码是这样搞到的(图解)
    defer用途
    vscode中go插件配置
    peewee外键性能问题
    bootstrap-select属性
    go环境变量及build文件
    peewee在flask中的配置
    python元类
    Java静态方法、单例模式区别
    Java实现list清除重复的字符串
  • 原文地址:https://www.cnblogs.com/wgjmcal/p/13265115.html
Copyright © 2011-2022 走看看