数据结构第四章——串

一、串类型的定义

1.串的相等:两个串长度相等并且对应位置的字符都相等。

2.基本操作(注意初始条件 S存在 个别由长度限制)

StrAssign(&T,chars)
//生成一个其值等于chars的串T
StrCopy9&T, S)
//由串S复制得串T
StrEmpty(S)
//若S为空串返回TRUE,否则返回FALSE
StrCompare(S, T)
//若S>T返回值>0, S=T返回值=0,  S<T 返回值<0
StrLength(S)
//返回S得元素个数
ClearString(&S)
//将S清为空串
Concat(&T, S1, S2)
//用T返回由串S1和S2连接而成得新串
SubString(&Sub, S, pos, len)
//Sub返回S得第pos个字符起长度为len得子串 从1开始
Index(S, T, pos)
//若S中存在和T值相同得子串则返回在S中第pos个字符之后第一次出现得位置;否则为0
Replace(&S, T, V)
//用V替换S中出现得所有与T相等得不重叠得子串
StrInsert(&S, pos, T)
//在串S第pos个字符之前插入T
StrDelete(&S, pos, len)
//从S中删除第pos个字符起长度为len得子串
DestroyString(&S)
//S被销毁

 


二、串的表示和实现

1.定长顺序存储:S[0]存放得是串得长度

2.堆分配存储表示

3.串得块链存储表示


三、串的模式匹配算法

1.简单匹配算法(Brute-Force):从前到后一次进行比较。算法复杂度最好情况O(n+m),最坏情况O(n*m)

int Index(SString S, SString T, int pos) 
//返回子串T在主串S中第pos个字符之后的位置
{   int i = pos,j = 1;
     while (i <= S[0] && j <= T[0]) 
	{	if (S[i] == T[j]) // 继续比较后继字符
		{ ++i;    ++j; } 
		else // 指针后退重新开始匹配
		{ i = i-j+2;   j = 1; 	}      
	} 
	if (j > T[0]) return i-T[0];
	else return 0;
} // Index

2.KMP算法:时间复杂度O(n+m)

int Index_KMP(SString S, SString T, int pos) 
{	
	int i = pos ,j = 1;
	while (i <= S[0] && j <= T[0]) 
	{
		if (j == 0 || S[i] == T[j])   // 继续比较后继字符
		{  ++i;  ++j;  }
		else 	j = next[j];      // 模式串向右移动
	}
	if (j > T[0]) return  i-T[0];   // 匹配成功
	else return 0;
} // Index_KMP

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值