您的位置:首页 > 理论基础 > 数据结构算法

大话数据结构 第五章 串 (读书笔记)

2017-08-23 08:14 197 查看
第五章 串

5.1开场白

5.2串的定义

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

l 串中的字符数目n称为串的长度。

l 零个字符的串称为空串。

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

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

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

 

5.3串的比较

电子词典查找单词实现的原理,其实就是字符串这种数据结构的典型应用。

 

 

 

 

5.4串的抽象数据类型

ADT 串 (string)

Data

串中元素仅由一个字符组成,相邻元素具有前驱与后继关系。

Operation

StrAssign(T, *chars);生成一个其值等于字符串常量chars的串T。

StrCopy(T, S);串S存在,由串S复制得串T。

ClearString(S);串S存在,将串清空。

StringEmpty(S);若串S为空,返回true,否则返回false。

StrCompare(S, T);若S>T,返回值>0,若S==T,返回0,若S<T,返回值<0。

Concat(T, S1, S2);用T返回由S1和S2联接而成的新串。

SubString(Sub, S, pos, len);串S存在,1<=pos<=StrLength(S),

                                 且0<=len<=StrLength(S)-pos+1,用Sub返回串S的  第pos个字符起长度为len的子串。

Index(S, T, pos);串S和T存在,T是非空串,1<=pos<=StrLength(S)。若主串S
中存在和串T值相同的子串,则返回它在主串S中第pos个字符 之后第一次出现的位置,否则返回0。

Replace(S, T, V);串S,T和V存在,T是非空串。用V替换主串S中出现的所有 与T相等的不重叠的子串。

StrInsert(S, pos, T);串S和T存在,1<=pos<=StrLength(S)+1。

在串S的第pos个字符之前插入串T。

StrDelete(S, pos, len);串S存在,1<=pos<=StrLength(S)-len+1。

从串S中删除第pos个字符起长度为len的子串。

 

endADT;

 

我们来看一个操作Index的实现算法:

/*T为非空串。若主串S中第pos个字符之后存在和T相等的子串*/

/*则返回第一个这样的子串在S中的位置,否则返回0*/

int  Index(String S, String T, int pos)

{

int n, m, i;

String sub;

if(pos > 0)

{

n = StrLength(S); /*得到主串S的长度*/

m = StrLength(T); /*得到主串T的长度*/

i = pos;

while(i <= n-m+1)

{

SubString(sub, S, i, m);  /*取主串第i个位置*/

  /*长度与T相等子串给sub*/

if(StrCompare(sub, T) != 0)/*如果两串不相等*/

++i;

else/*如果两串相等*/

 return i;       /*则返回i值*/

}

}

return 0;  /*若无子串与T相等,返回0*/

}

 

5.5串的存储结构不太会要问老师  一次蛋蛋的忧伤呀 ~~~~~

5.5.1串的顺序存储结构

 

 

 

5.5.2串的链式存储结构

 

 

5.6朴素的模式匹配算法

5.7KMP模式匹配算法

5.7.1 KMP模式匹配算法原理

5.7.2 next数组值推导

5.7.3 KMP模式匹配算法实现

5.7.4 KMP模式匹配算法改进

5.7.5 nextval数组值推导

 

5.8总结回顾

5.9结尾语
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: