数据结构与算法6(串,数组和广义表)

串(String)----零个或多个任意字符组成的有限序列

a2164f1fb93a40b789dcf00962297d08.png

 子串:一个串中任意个连续字符组成的子序列(含空串)称为该串的子串。

真子串是指不包含自身的所有子串。

字符位置:字符在序列中的序号为该字符在串中的位置
子串位置:子串第一个字符在主串中的位置
空格串:由一个或多个空格组成的串,与空串不同

串相等:当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,这两个串才是相等的。

 

串的顺序存储结构

3b5e81c7f12b445a87d50a0f071efd54.png

串的链式存储结构

75b15581558445c6b6eec31708f16e9d.png

 

串的模式匹配算法:确定主串中所含子串(模式串)第一次出现的位置 (定位)

cd87963e2ab546bbb084d9e685dc8748.png

 Brute-Force简称为BF算法,亦称简单匹配算法。采用穷举法的思路。

算法实现

0da5782ccdf44a71a510ee382bc43b4d.png

 

KML

3c53e09c96814753ac06800b2d3a286d.png

 箭头左边的模式串和主串相互匹配,且模式串有两个相等的子串,称为公共前后缀,

a6f7dbedc09546bc933d952a0fd617c3.png

直接移动模式串,使之前的前缀移到后缀的位置。 如果模式串有多个公共前后缀,则选择最长的那一对

bfde7dcf8f954701b688ceb9134540cd.png

 

d8057be0b3764924aec8b014ccb23eaa.png

710a4cf360e2435485fcb3da01e11ef8.png 

 

数组

数组:按一定格式排列起来的具有相同类型的数据元素的集合。

n维数组:若 n-1 维数组中的元素又是一个一维数组结构,则称作 n维数组。

 

特殊矩阵的压缩存储

不适宜常规存储的矩阵:值相同的元素很多且呈某种规律分布;零元素多。

矩阵的压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

 

对称矩阵的压缩存储

对称矩阵上下三角中的元素数均为:
n(n+ 1)/2
可以以行序为主序将元素存放在一个一维数组 SA[n(n+1)/2]中。

其中元素SAn1的下标为n(n-1)/2

三角矩阵

37cc0372632d46be98731b79de5bf7d3.png

 对角矩阵

3ebd73311d074d7bbb1fea68a8689111.png

 f782371f501848e9861223f2018ce3e0.png

 稀疏矩阵

d0c5899a5581457b928b7d4030ba5826.png

f3066bcfc63e4f8b9da337ac9990cbb4.png 

 

广义表

广义表(又称列表 Lists)是n>=0 个元素 ao, a.. .... an-1的有限序列,其中每一个ai或者是原子,或者是一个广义表。

广义表通常记作:LS
其中:LS为表名,n为表的长度,每一个 ai为表的元素。
· 习惯上,一般用大写字母表示广义表,小写字母表示原子。

表头:若 LS非空,则其第一个元素 a 1就是表头。
记作 head(LS) = a1注:表头可以是原子,也可以是子表。

表尾; 除表头之外的其它元素组成的表。记作 tail(L)
注:表尾不是最后一个元素,而是一个子表。

广义表的长度定义为最外层所包含元素的个数;

广义表的深度定义为该广义表展开后所含括号的重数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值