《大话数据结构》第五章学习笔记----串

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

串的定义

一般记为s=“a1aa2a3...an"(n>=0),其中s是串的名称,括起来的字符序列就是串的值。

串中的字符数目n称为串的长度,n是一个有限的数值。零个字符的串称为空串,可以直接用””表示。

空格串,是只包含空格的串。注意它和空串的区别,空格串是有内容有长度的,而且不止一个空格。

子串与主串,串中任意个数的连续字符组成的子序列称为改串的子串,相应地,包含主串的串称为主串。

子串在主串中的位置就是子串的第一个字符在主串中的序号。

串的比较

串的比较是通过串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号。

给定两个串:s="a1a2a3...an",t="b1b2...bm",当满足一下条件之一时,s<t。

(1)n<m,且ai=bi(i=1,2,...,n)。

(2)存在某个k<=min(m,n),使得ai=bi(i=1,2,...,k-1),ak<bk。

串的存储结构

串的顺序存储结构

串的顺序存储结构是用一组地址连续的存储串中的字符序列的。

一般串用‘\0'来表示串值的终结。

 

 串的链式存储结构

串的链式存储结构,与线性表类似,但是串的结构中的每个元素是一个字符,如果也简单地应用链表存储串值,一个结点对应一个字符,会造成很大的空间浪费。因此可以一个结点存放多个字符,最后一个结点未被占满时,可以用其他非串值字符补全。

串的链式存储结构除了在连接串与串操作时有一定方便之外,总的来说不如顺序存储灵活,性能也不如顺序存储结构好。

朴素的模式匹配算法

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

/* 朴素的模式匹配法 */
int Index(String S, String T, int pos) 
{
	int i = pos;	/* i用于主串S中当前位置下标值,若pos不为1,则从pos位置开始匹配 */
	int j = 1;				/* j用于子串T中当前位置下标值 */
	while (i <= S[0] && j <= T[0]) /* 若i小于S的长度并且j小于T的长度时,循环继续 */
	{
		if (S[i] == T[j]) 	/* 两字母相等则继续 */
      	{
			++i;
         	++j; 
      	} 
      	else 				/* 指针后退重新开始匹配 */
      	{  
         	i = i-j+2;		/* i退回到上次匹配首位的下一位 */
         	j = 1; 			/* j退回到子串T的首位 */
      	}      
	}
	if (j > T[0]) 
		return i-T[0];
	else 
		return 0;
}

这种方法的时间复杂度为O(n+m);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值