学习笔记(3)——串

来源:互联网 发布:mysql增删改查的技巧 编辑:程序博客网 时间:2024/06/04 00:20

计算机上非数值处理的对象基本为字符串数据,一般简称为。串是由零个或多个字符组成的有限序列,串中字符的数量称为串的长度,零个字符的串为“空串”。串中任意个连续的字符组成的子序列称为“子串”。包含子串的串相应地称为“主串”。字符在序列中的序号称为该字符在串中的“位置”。子串在主串中的位置以子串的第一个字符在主串中的位置来表示。当且仅当两个串的长度以及对应位置的字符都相等时,称两个串相等

串的最小操作子集:串赋值;串比较;求串长;串联接;求子串。其他串操作均可以在这个最小子集上实现。

串的表示:

(1)定长顺序存储表示:以连续的存储单元存储串值字符序列。

分配一个固定长度的存储区,可用定长数组表示。串的实际长度在预定义长度范围内是随意的,超过预定义长度的部分被舍去,称为“截断”。这种类似线性表的顺序存储结构的串有两种表示串长的方式:①以下标为0的数组分量存放串的实际长度;②串后加一个不计入串长的结束标记字符,如C语言中的字符串以“\0”结束。

(2)堆分配存储表示:仍以一组连续的存储单元存储串值字符序列,但是他们的存储空间是在程序执行过程中动态分配得到的。C语言中用mallloc()和free()来管理。以结构体的形式来表示,结构体中包含指向串首的指针和串的实际长度。

(3)块链存储表示:采用链表的方式存储串值。每个节点可以储存一个字符,也可以存储多个字符,存储字符的多少称为“节点大小”。串长不一定是节点大小的整数倍,则最后一个节点中不满的存储空间用非串值得字符代替,如#等。


存储密度=串值所占的存储位/实际分配的存储位。


串的模式匹配算法

子串的定位操作通常称作串的模式匹配,其中子串称为模式串。

算法1:采用顺序存储结构,可以不依赖其他串操作的匹配算法

基本思想:从主串中的第1个字符(或人为规定)起,和模式串的第一个字符比较,若相等,则继续比较后边一个字符;否则从主串的下一个字符开始重新开始匹配。

该种算法在某些情况下效率比较低,如子串为“00000000001”,主串为“0000000000000000000000000000000000001”。

算法2:KMP算法

基本思想:每当一次匹配中出现字符不相等的情况,利用已经得到的“部分匹配”的结果将模式串向右“滑动”尽可能远的一段距离后继续进行比较。


0 0