数据结构——第五章(串)

本文介绍了数据结构中的串,定义为由0个或多个字符组成的有限序列,类似于特殊的线性表。串的存储结构包括顺序存储和链式操作。讨论了串的基本操作如求子串、比较字符串和定位操作的实现。重点讲解了串的模式匹配算法,包括朴素模式匹配及其O(nm)的时间复杂度,以及KMP算法,如何通过next数组避免回溯以提高效率,时间复杂度为O(m+n)。
摘要由CSDN通过智能技术生成

1.串

1.1 串的定义

  • 串:即字符串,是由0个或多个字符组成的有限序列
  • 串相当于是一种特殊的线性表,数据对象限定为数据集
  • 字符在主串中的位置:从1开始计数,与线性表中的位序相同

1.2 串的存储结构

1.2.1 串的顺序存储

  • 用静态数组存储字符串(定长顺序存储)
#define MAXLEN 255		//预定义最大串长为255
typedef struct{
   
	char ch[MAXLEN];	//每个分量存储一个字符
	int length				//串的实际长度
}SString;

1.2.2 串的链式操作

typedef struct StringNode{
   
      char ch[4];			//一个节点可以存4个字符或者多个字符
 		struct StringNode *next;
}SteingNode,*String;

1.3 串的基本操作的实现

1.3.1 求子串
  • 用Sub返回串s的第pos个字符起长度为len的子串
bool SubString(SString &Sub,SString S,int pos,int len){
   
		//子串范围越界
		if(pos+len-1 > s.length)
			 return false;
		for(int i = pos
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值