大话数据结构 第五章 串 (读书笔记)
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结尾语
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结尾语
相关文章推荐
- 《Python基础教程》 读书笔记 第五章(下)循环语句
- [读书笔记]-大话数据结构-2-算法
- 第五章 走得太远别忘了回家的路(1) ——《箴言》第三章 Windows运行机理之读书笔记
- 读书笔记-《大话数据结构》第一章数据结构绪论
- 【读书笔记】学习OpenCV(中文版)第五章
- 【读书笔记】设计模式第五章:行为模式
- [数据结构]第五章-数组和广义表(读书笔记2)
- 《大话数据结构》读书笔记之线性表基本操作(单链表实现)
- 第2章 算法效率的度量方法---《大话数据结构》读书笔记
- Head Frist Python 读书笔记 第五章 处理数据
- 《利用python进行数据分析》读书笔记--第五章 pandas入门
- 【读书笔记】统计学:从数据到结论 第五章
- 《Pro Ogre 3D Programming》 读书笔记 之 第五章 场景管理 场景查询 (转)
- 《Effective Objective-C 2.0》读书笔记---第五章
- 《中国人史纲》读书笔记:第四章 半信史时代 第五章 信史时代
- 《Linux内核设计与实现》读书笔记 第五章 系统调用
- 第五章读书笔记——系统调用
- 20135320赵瀚青LINUX第五章读书笔记
- 《Linux内核设计与实现》第四周读书笔记——第五章
- 读书笔记_CLR.via.c#第五章_基元类型_引用类型_值类型