数据结构-串

本文介绍了串的基本概念,包括串的定义、存储结构(定长顺序存储、堆分配存储、块链存储)以及基本操作。重点讲解了KMP算法,包括模式匹配的优化思路、部分匹配表(PM表)、next表的计算及其优化后的nextval表,通过代码实现详细阐述KMP算法的工作原理。
摘要由CSDN通过智能技术生成

1.1 串的定义

        1)字符串简称串,计算机上非数值春丽的对象基本都是字符串数据。如信息检索系统,即搜索引擎,文本编辑系统,即Word等

        2)串是由零个或多个字符组成的有限序列,一般记为S=‘a1a2....an’ (n>=0),其中,S是串名,单引号括起来的字符序列是串的值,且ai可以是字母、数字或其他字符。串中字符的个数称为串的长度,n=0时称该串为空串

        3)串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集。但两种数据结构的基本操作差距极大,线性表的基本操作主要以单个元素作为操作对象,而串的基本操作中通常以子串作为操作对象

1.2 串的存储结构

        1)定长顺序存储表示

                ① 类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列

                ② 代码实现

#define MAXLEN 255
typedef struct{    //用数组存储串值,用整型存储串长
    char ch[MAXLEN];
    int length;
}SString;

                ③ 串长既可以通过代码中实例实现,也可以在串值后面加一个不计入串长的结束标记字符 '\0' ,此时串长为隐含值,需要遍历数组才能知道串长

                ④ 在一些串的操作中,若串值序列的长度超过上街,就需要用“截断法处理”,要克服这种弊端,只能采用动态分配

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值