数据结构(C++)——第四章 字符串和多维数组
Posted Sure Information
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C++)——第四章 字符串和多维数组相关的知识,希望对你有一定的参考价值。
字符串:
定义:由零个或多个字符组成的有限序列,一般用S表示
空格串:只包含空格
空串:包含字符个数,及长度为0的串,记作""
子串:字符串中,任意个连续的字符组成的子序列
主串:包含子串的串
位置:子串的第一个字符在主串中的序号
存储结构:
顺序存储:
用一个变量来表示串的长度
在串尾存储一个不会在串中出现的特殊字符作为终结符
用数组的0元素存放串的长度,串值从1号单元开始存放
链接存储:
非压缩存储:一个结点存储一个字符,缺点是较为浪费空间
压缩存储:一个结点存储多个字符,但是无法精准确定某位置的字符
模式匹配:在主串中寻找子串的过程,其中,子串T称为模式
朴素的模式匹配算法:BF算法
最好情况下时间复杂度为O(m+n)
最坏情况下时间复杂的为O(m*n)
m,n为主串和子串长度
改进的模式匹配算法:KMP算法
时间复杂度为O(m+n)
多维数组:
数组:
定义:由类型相同的数据元素构成的有序集合
多维:数组元素受到n个线性关系的约束,及是n维数组
基础操作:读和写
既两种运算:存取和修改
补充操作还有检索和排序等
没有插入和删除
存储方式:
采用顺序存储,将多维关系映射为一维关系(适应内存单元的一维结构
区分行优先和列优先
矩阵的压缩存储(ij从0开始):
特殊矩阵:
对称矩阵:下标k与aij的关系:k=(i+1)*i/2+j
三角矩阵:
下三角矩阵下标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
对角矩阵:映射矩阵元素bts与原元素aij的关系:t=i,s=j-i+1
稀疏矩阵:0元素居多的矩阵
三元组顺序表:存储元素所在行列和值,还需存储矩阵行列个数,和0元素个数。
十字链表:数据中存储行列和值,两个指针指向同一行、同一列中下一个三元组,为避免关系缺失,每一行列都需要头结点
注意:
稀疏矩阵不是特殊矩阵
0元素分布没有规律,如果有规律,应当寻找合适的映射进行存储
用三元组表存储不一定能节省空间
以上是关于数据结构(C++)——第四章 字符串和多维数组的主要内容,如果未能解决你的问题,请参考以下文章