大话数据结构 串

Posted expedition

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话数据结构 串相关的知识,希望对你有一定的参考价值。

由零个或多个字符组成的有限序列,又名字符串

技术图片 

s 是串的名称

用双引号 或 单引号 括起来的字符序列 是 串的值

字符数目n 是串的长度

空串:0个字符的串,长度为0——>  s = ""

空格串:——> s = " "

 

 子串:串中任意个数的连续字符组成的子序列称为该串的子串

包含子串的串称为主串

 

串的比较

s1 = "abcd",s2 = "acbd"

第一个字母都是a,认为不存在大小差异

第二个字母中”b“在字母表中靠前于”c“,认为”b“ < "c",于是 s1 < s2

 

技术图片

 

字符集:如ASCII 码,Unicode

 

 两个串相等——> 长度 + 各个位置的字符都相等

两个串不等时:

1.s1 = "hap"

s2 = "happy" ——> 则 s1 < s2

2.s1 = "abcd"

s2 = "acbd"——> 则 s1 < s2

 

串的抽象数据类型

串的逻辑结构和线性表类似,但,串针对的是字符集,也就是串中的元素都是字符

 

线性表       更关注的是单个元素的操作  【比如插入、删除】

串              更多的是查找子串位置、得到指定位置子串、替换子串

 

 技术图片

# 不同的高级语言,对串的基本操作有不同的定义方法

 

 

串的存储结构

1.顺序存储结构

用一组地址连续的存储单元存储串中的字符序列

按照预定义的大小,为每个定义的串变量 分配一个 固定长度的存储区 【定长数组】

 

既然定长,必然有 预定义的最大串长度

一般可以将实际的串长度值保存在数组的 0 下标位置

也可以在串值后面加一个不计入串长度的结束标记字符 如 “”        【此时 遍历计算即可得串的长度】

技术图片

但,由于串的操作,可能会超出 MaxSize,于是,对于串的顺序存储,有了一些变化,串值的存储空间可在程序的执行中 动态分配

 

2.链式存储结构

 

 技术图片

一个结点存多少字符,直接影响串处理的效率 【根据实际情况选择】

 

 #除了 连接串与串操作方便外,灵活度和性能都比不上顺序存储

 

 

 

 

 

朴素的模式匹配算法

串的模式匹配:子串的定位操作

 技术图片

        技术图片

  技术图片

技术图片

技术图片

最好情况——> 一开始就匹配成功  时间复杂度O(1)

稍差一些——> 每次首字母直接不匹配,省去对子串的循环   时间复杂度为O(n【主串长】+m【要匹配的子串长】)

       由等概率原则,平均(n + m ) / 2次    时间复杂度O(n+m)

最坏情况——> 每次不成功的匹配发生在子串最后一个

技术图片

到了第41个位置,全部匹配相等,不需要再继续下去

如果没有可匹配的子串【比如是0....002】,到了第41位不匹配,后面同样不需要继续比

期间进行了( 50 - 10 + 1) * 10 次判断

时间复杂度为    O((n-m+1)*m)

 

 太低效!!!!

 

KMP模式匹配算法 

 1.原理

P.163

2.next数组值推导

P.167

3.KMP模式匹配算法实现

技术图片

技术图片

技术图片

技术图片

 

 KMP模式匹配算法改进

170

nextval数组值推导

172

 

 

 

 

 

【标页码的部分,计划打印了细看,有总结的话,会更新这篇博客,需要pdf的可以私信~】

以上是关于大话数据结构 串的主要内容,如果未能解决你的问题,请参考以下文章

大话数据结构5之串

C语言数据结构(大话数据结构——笔记3)第五章:串(字符串)

大话存储II学习笔记(15章),块级集群存储系统

大话数据结构之php实现单链表

数据结构与算法合集

大话数据结构读书笔记