严蔚敏数据结构-第四章 串
}ADT String
6
例子: 例子: 都为串名。 设:S, T, V, a, b, c, d都为串名。 都为串名 a=‘bei’ b=‘jing’ c=‘ ’ d=‘beijing’ (1)StrAssign(&T, chars)和StrCopy(&T, S)赋值操作。 赋值操作。 和 赋值操作 例: StrAssign(S, ‘abcd’) 例: StrCopy(S, d) (2)StrCompare(S, T) 判等函数。 判等函数。 例:StrCompare(a,b) StrCompare(φ, φ) (3)StrLength(S) 求长函数 S=‘abcd’ S=‘beijing’
9
(8)StrInsert(&S,pos,T) 插入操作。 插入操作。 if 1≦pos≦StrLength(S)+1 ≦ ≦ 在串S的第 个字符之前插入串T。 的第pos个字符之前插入串 在串 的第 个字符之前插入串 。 else 返回 返回error 例: StrInsert(a,4,b) if a=‘beijing’ (9)StrDelete(&S, pos, len) 删除操作。 删除操作。 1≦pos≦StrLength(S)-len+1 ≦ ≦ 从串S中删除第 个字符起长度为len的子串 中删除第pos个字符起长度为 的子串。 从串 中删除第 个字符起长度为 的子串。 else 返回 返回error 例: StrDelete(d,4,4) d=‘bei’
Sub=‘bei’ Sub=φ
8
(6)Index(S, T, pos) 定位函数。 定位函数。 if 在主串 中的第 个位置之后存在和 相等的子串 在主串S中的第 个位置之后存在和T相等的子串 中的第pos个位置之后存在和 返回S中第一个这样的子串在主串 中的位置。 中第一个这样的子串在主串S中的位置 返回 中第一个这样的子串在主串 中的位置。 else 返回零 例: Index(d,b,1)=4 Index(d,c,1)=0 Index(d,b,5)=0 (7)Replace(&S, T, V) 置换函数。 置换函数。 以串V替换所有出现的和非空串 相等的不重叠的子串。 替换所有出现的和非空串T相等的不重叠的子串 以串 替换所有出现的和非空串 相等的不重叠的子串。 例: Replace(d,b,c) d=‘bei ’ 例:设 S=‘bbabbabba’ T=‘ab’ V=‘c’ 则 Replace(S, T, V) S=‘bbcbcba’ ‘
Replace(&S, T, V)
存在,T非空 替换主串S中出现的所有与 串S,T和V存在 非空 用V替换主串 中出现的所有与 和 存在 非空, 替换主串 中出现的所有与T 相等的不重叠的子串
5
StrInsert(&S, pos, T)
串S和T存在 和 存在,1<=pos<=StrLength(S)+1,在串 的第pos个 在串S的第 个 存在 在串 的第 字符之前插入串T 字符之前插入串
ClearString(&S)
存在将S清为空串 串S存在将 清为空串 存在将
Concat(&T, S1, S2)
串S1和S2存在用 返回由S1和S2联接而成的新串 和 存在用T返回由 和 联接而成的新串 存在用 返回由
SubString(&Sub, S, pos, len)
存在,1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1 串S存在 存在 且
if 1≦pos≦StrLength(S) 且 0 ≦len≦StrLength(S)-pos+1 ≦ ≦ ≦ 返回从串S中第 个字符起, 的字符序列。 用Sub返回从串 中第 个字符起,长度为 的字符序列。 返回从串 中第pos个字符起 长度为len的字符序列 else 返回 返回error
例: SubString(Sub, d, 1, 3) SubString(Sub, d, 4, 0)
chars是字符串常量。生成一个其值等于chars的串 。 是字符串常量。生成一个其值等于 的串T。 是字符串常量 的串
StrCopy(&T, S)
存在则由串S复制得串 串S存在则由串 复制得串 存在则由串 复制得串T
StrEmpty(S)
存在则若S为空串 串S存在则若 为空串 返回真否则返回假 存在则若 为空串,返回真否则返回假
当两个串的长度相等, 相等—— 当两个串的长度相等,并且各个对应位置的字 相等 符都相等,则称两个串是相等的。 符都相等,则称两个串是相等的。 空格串—— 由一个或多个空格组成的串称为空格串。 空格串 由一个或多个空格组成的串称为空格串。 注意:串值必须用一对单引号括起来,但单引号本身不 注意:串值必须用一对单引号括起来, 属于串。 属于串。 例: x=‘123’; x=123; tsing=‘tsing’
S1 4 a b c d S2 2 e f T 6 a b c d e f
15
(2)S1串长 最大串长 串长<最大串长 串长 最大串长; S1,S2串长和 最大串长 串长和>最大串长 串长和 最大串长;
S1 6 a b c d e f S2 6 g h i j k l T 8 a b c d e f g h
3
串的抽象数据类型的定义: 串的抽象数据类型的定义: ADT String{ 数据对象: 数据对象:D={ai|ai∈CharacterSet, i=1,2,...,n, n>=0} 数据关系: 数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=2,...,n} 基本操作: 基本操作: StrAssign(&T, chars)
(1) SubString(Sub1, S, (2)SubString(Sub2, S, (3)Concat(S1, (4)Concat(S, return ok; } , ,
12
4.2 串的表示和实现 4.2.1 定长顺序存储表示 类似于线性表的顺序存储结构,用一组地址连续的存 类似于线性表的顺序存储结构 用一组地址连续的存 储单元存储串值的字符序列. 储单元存储串值的字符序列. 用定长数组表示: 用定长数组表示: #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; //0号单元存放串长 号单元存放串长
返回值<0 返回值 返回值=0 返回值
7
(4)Concat(&T, S1, S2) 联接函数。 联接函数。 S2=‘t1t2…tn’ 例 S1=‘S1S2…Sm’ 则: Concat(T, S1, S2) T=‘S1S2…Smt1t2…tn’ Concat(T, S2, S1) T=‘t1t2…tnS1S2…Sm’ (5)SubString(&Sub, S, pos, len) 求子串函数。 求子串函数。
第四章 串
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例
1
4.1.1 串的逻辑结构定义 是由零个或多个字符组成的有限序列。 串—— 是由零个或多个字符组成的有限序列。 一般记为: 一般记为:S=‘a1a2…an’ (n>=0) 长度—— 串中字符的数目。 长度 串中字符的数目。 空串—— 零个字符的串,用符号 来表示空串。 空串 零个字符的串,用符号φ来表示空串 来表示空串。 串中任意个连续的字符组成的子序列。 子串—— 串中任意个连续的字符组成的子序列。 子串 主串——包含子串的串。 包含子串的串。 主串 包含子串的串 位置—— 字符在序列中的序号为该字符在串中的位置。 字符在序列中的序号为该字符在串中的位置。 位置 例:a=‘bei’ b=‘jing’ c=‘beijing’ d=‘bei jing’ 的长度分别为: 、 、 、 。 则:a,b,c,d的长度分别为:3、4、7、8。 的长度分别为 a、b是c和d的子串。 的子串。 、 是 和 的子串 a 在c和d中的位置都是 。 中的位置都是1。 和 中的位置都是 2 b在c中的位置是 ,在d中的位置是 中的位置是4, 中的位置是5 在 中的位置是 中的位置是
StrCompare(S, T)
存在,若 则返回值>0,若 则返回值=0, 串S和T存在 若S>T,则返回值 若S=T,则返回值 和 存在 则返回值 则返回值 则返回值<0 若S<T,则返回值 则返回值
4
StrLength(S)
存在返回S的元素个数称为串的长度 串S存在返回 的元素个数称为串的长度 存在返回 的元素个数称为串的长度.
StrDelete(&S, pos, len)
存在,1<=pos<=StrLength(S)-len+1从串中删除第 个 从串中删除第pos个 串S存在 存在 从串中删除第 字符起长度为len的子串 字符起长度为 的子串
DestroyString(&S)
存在,则串 串S存在 则串 被销毁 存在 则串S被销毁
Sub返回串 的第pos个字符起长度为 返回串S的第 个字符起长度为len的子串 用Sub返回串S的第pos个字符起长度为len的子串
Index(S, T, pos)
存在,T非空 若主串S中存 串S和T存在 非空 和 存在 非空,1<=pos<=StrLength(S),若主串 中存 若主串 在和串T值相同的子串 则返回它在主串S中第 值相同的子串,则返回它在主串 中第pos个字符之 在和串 值相同的子串 则返回它在主串 中第 个字符之 后第一次出现的位置,否则函数值为 否则函数值为0 后第一次出现的位置 否则函数值为
11
作业: 作业: 1.用5种串的基本操作(StrAssign、StrCompare、StrLength、 用 种串的基本操作 种串的基本操作( 、 、 、 Concat、SubString)来逻辑实现StrInsert(&S, pos, T)操作 、 操作. )