数组和字符串
主要内容
字符串存储
模式匹配
数组的逻辑结构特征
数组的存储方式及寻址方法
特殊矩阵和稀疏矩阵的压缩存储方法
4.1 串的基本概念
4.1.1 串的概念
串(String)
是零个或多个字符组成的有限序列。
一般记作S =“a1a2a3…an”,
其中S是串名,双引号是定界符用双引号括起来的字符序列是串值;ai(1≦i≦n)可以是字母、数字或其它字符。
串中所包含的字符个数称为该串的长度。
(1)主串和子串
串中任意个连续字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。
通常将子串在主串中首次出现时的该子串的首字符对应的主串中的序号,定义为子串在主串中的序号(或位置)。
(2)空白串和空串
长度为零的串称为空串(Empty String),它不包含任何字符。记作:" ".
通常将仅由一个或多个空格组成的串称为空白串(Blank String)。
空白串和空串的不同,如“ ”和“”分别表示长度为1的空白串和长度为0的空串。
(3)串相等
当且仅当两个串的值相等时,称这两个串是相等的,即只有当两个串的长度相等,并且每个对应位置的字符都相等时才相等。
如何表示串的长度?
方案1:用一个变量来表示串的实际长度。
方案2:在串尾存储一个不会在串中出现的特殊字符作为串的终结符,表示串的结尾。
方案3:用数组的0号单元存放串的长度,从1号单元开始存放串值。
链接串:用链接存储结构来存储串。
如何改造链表实现串的链接存储?
(1)非压缩形式 (2)压缩形式
4.2模式匹配
给定主串S="s1s2…sn"和模式T=“t1t2…tm”,
在S中寻找T 的过程称为模式匹配。
模式匹配的应用包括生物信息学(基因表达分析,基因配对)、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测.
如果匹配成功,返回T 在S中的位置,如果匹配失败,返回 -1
假设串采用顺序存储结构,串值从0号单元开始存放。
4.2.1模式匹配——BF(Brute-Force)算法
将主串的第pos个字符和模式的第1个字符比较,若相等,继续逐个比较后续字符;若不等,从主串的下一字符 (pos+1) 起,重新与第一个字符比较。直到主串的一个连续子串字符序列与模式相等 。返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。否则,匹配失败,返回值 0 。
int BF(char S[ ], char T[ ])
{
i=0; j=0;
while (i<S.Length()&&j<T.length())
{
if (S[i]==T[j]) {
i++; j++;
}
else {
i=i-j+1; j=0;
}
}
if (j>=T.length