数据结构(C++)——第四章 字符串和多维数组

Posted Sure Information

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C++)——第四章 字符串和多维数组相关的知识,希望对你有一定的参考价值。

字符串:

  1. 定义:由零个或多个字符组成的有限序列,一般用S表示

    • 空格串:只包含空格

    • 空串:包含字符个数,及长度为0的串,记作""

    • 子串:字符串中,任意个连续的字符组成的子序列

    • 主串:包含子串的串

    • 位置:子串的第一个字符在主串中的序号

  2. 存储结构:

    1. 顺序存储:

      1. 用一个变量来表示串的长度

      2. 在串尾存储一个不会在串中出现的特殊字符作为终结符

      3. 用数组的0元素存放串的长度,串值从1号单元开始存放

    2. 链接存储:

      1. 非压缩存储:一个结点存储一个字符,缺点是较为浪费空间

      2. 压缩存储:一个结点存储多个字符,但是无法精准确定某位置的字符

  3. 模式匹配:在主串中寻找子串的过程,其中,子串T称为模式

    1. 朴素的模式匹配算法:BF算法

      • 最好情况下时间复杂度为O(m+n)

      • 最坏情况下时间复杂的为O(m*n)

      • m,n为主串和子串长度

    2. 改进的模式匹配算法:KMP算法

      • 时间复杂度为O(m+n)


多维数组:

  1. 数组:

    1. 定义:由类型相同的数据元素构成的有序集合

    2. 多维:数组元素受到n个线性关系的约束,及是n维数组

    3. 基础操作:读和写

      • 既两种运算:存取和修改

      • 补充操作还有检索和排序等

      • 没有插入和删除

    4. 存储方式:

      • 采用顺序存储,将多维关系映射为一维关系(适应内存单元的一维结构

      • 区分行优先和列优先

  2. 矩阵的压缩存储(ij从0开始):

    1. 特殊矩阵:

      1. 对称矩阵:下标k与aij的关系:k=(i+1)*i/2+j

      2. 三角矩阵:

        • 下三角矩阵下标k与aij的关系:当i≥j时,k=(i+1)*i/2+j;当i<j时,k=(n+1)*(n+2)/2

        • 上三角矩阵下标k与aij的关系:当i≤j时,k=(2n-i-1)*i/2+j-i;当i>j时,k=(n+1)*(n+2)/2

      3. 对角矩阵:映射矩阵元素bts与原元素aij的关系:t=i,s=j-i+1

    2. 稀疏矩阵:0元素居多的矩阵

      1. 三元组顺序表:存储元素所在行列和值,还需存储矩阵行列个数,和0元素个数。

      2. 十字链表:数据中存储行列和值,两个指针指向同一行、同一列中下一个三元组,为避免关系缺失,每一行列都需要头结点

      3. 注意:

        • 稀疏矩阵不是特殊矩阵

        • 0元素分布没有规律,如果有规律,应当寻找合适的映射进行存储

        • 用三元组表存储不一定能节省空间



以上是关于数据结构(C++)——第四章 字符串和多维数组的主要内容,如果未能解决你的问题,请参考以下文章

C++ 数组与字符串⁽²²⁾|多维数组

一个管理多维数组的类!如何管理单元格中的不同数据类型?

C++ 使用 std::sort 处理多维字符串数组

数据结构第四章学习小结

c ++:解析包含表达式“访问多维数组”的字符串

《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算