第四章 串.ppt
《第四章 串.ppt》由会员分享,可在线阅读,更多相关《第四章 串.ppt(51页珍藏版)》请在麦多课文档分享上搜索。
1、第四章 串,4.1 串类型的定义 4.2 串的表示和实现4.2.1 定长顺序存储表示4.2.2 堆分配存储表示4.2.3 串的块链存储表示 4.3 串的模式匹配,一、串及串的基本概念串(String) 即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。,记为: S =a1a2an (n0 ),串名,串值(用 括起来),隐含结束符/0 ,即ASCII码NULL,4.1 串类型的定义,串长:串中字符个数(n0). n=0 时称为空串,记 。 空格串:由一个或多个空格符组成的串。 子串:串S中任意个连续的字符序列叫S的子串; S叫主串。 子串位置:子串的第一个字符在主串中
2、的序号。 串相等:串长度相等,且对应位置上字符也相等。,术语:,1.空串和空格串有无区别?有区别。空串(Null String)是指长度为零的串;而空格串(Blank String)是指包含一个或多个空格的字符串. 2.现有以下4个字符串:a =BEI b =JING c = BEIJING d = BEI JING 问: 他们各自的长度? b是哪个串的子串?它在主串中的位置是多少?,例:,ADT String 数据对象: D=ai | ai CharacterSet, i=1, 2,,n, n0 数据关系: R= | ai-1,ai D, i=2, ,n 基本操作:/ 有13个,二、串的抽象
3、数据类型定义,StrCopy (&T, S)初始条件:串 S 存在。操作结果:由串 S 复制得串 T。,二、串的抽象数据类型定义,StrAssign (&T, chars)初始条件:chars 是字符串常量。操作结果:生成一个值为 chars的串 T 。,StrEmpty(S) 初始条件:串S存在。 操作结果:若 S 为空串,则返回TRUE, 否则返回 FALSE。,二、串的抽象数据类型定义,DestroyString (&S)初始条件:串 S 存在。操作结果:串 S 被销毁。,例如:StrCompare(data, state) 0,StrCompare (S, T) 初始条件:串 S 和
4、T 存在。 操作结果:若S T,则返回值 0; 若S T,则返回值 0; 若S T,则返回值 0。,二、串的抽象数据类型定义,StrLength(S) 初始条件:串 S 存在。 操作结果:返回 S 的元素个数,称为串的长度。,二、串的抽象数据类型定义,Concat(&T,S1,S2) 初始条件:串 S1 和 S2 存在。 操作结果:用 T 返回由 S1 和 S2联接而成的新串。 或Concat(S1,S2) 用S1返回由 S1 和 S2联接而成的新串。,例如:S1= man , S2= kindConcat( T,S1, S2)求得 T = mankind或Concat( S1, S2)求得
5、S1 = mankind,二、串的抽象数据类型定义,SubString (&Sub, S, pos, len) 初始条件:串 S 存在,1posStrLength(S)且0lenStrLength(S)-pos+1。 操作结果:用 Sub 返回串 S 的第 pos 个字符起长 度为 len 的子串。,例如: SubString( sub, commander, 4, 3)求得 sub = man ;,二、串的抽象数据类型定义,Index (S, T, pos) /求子串序号 初始条件:串S和T存在,T是非空串, 1posStrLength(S)。 操作结果: 若主串 S 中存在和串 T 值相同
6、的子串, 则返回T在主串 S 中第pos个字符之后第一次出现的位置; 否则函数值为0。,假设 S = abcaabcaaabc, T = bca,Index(S, T, 1) = 2;,Index(S, T, 3) = 6;,Index(S, T, 8) = 0;,二、串的抽象数据类型定义,Replace (&S, T, V) 初始条件:串S, T和 V 均已存在,且 T 是非空串。 操作结果:用V替换主串S中出现的所有与串T相等的 不重叠的子串。,假设 S = abcaabcaaabca, T = bca,若 V = x, 则经置换后得到S = axaxaax,若 V = bc, 则经置换后
7、得到S = abcabcaabc,二、串的抽象数据类型定义,StrInsert (&S, pos, T) 初始条件:串S和T存在,1posStrLength(S)1。 操作结果:在串S的第pos个字符上插入串T。,例如:S = chater,T = rac,则执行 StrInsert(S, 4, T)之后得到S = character,二、串的抽象数据类型定义,StrDelete (&S, pos, len) 初始条件:串S存在1posStrLength(S)-len+1。 操作结果:从串S中删除第pos个字符起长度为len的子串。,ClearString (&S) 初始条件:串S存在。 操作
8、结果:将S清为空串。 end String,二、串的抽象数据类型定义,对于串的基本操作集可以有不同的定义方法。 在上述抽象数据类型定义的13种操作中,串赋值 StrAssign、串比较StrCompare、求串长StrLength、 串联接Concat以及求子串SubString等五种操作构成串类型的最小操作子集,这些操作不可能利用其它串操作来实现. 其它串操作可在这个最小操作子集上实现。,二、串的抽象数据类型定义,int Index (String S, String T, int pos) if (pos 0) n = StrLength(S); m = StrLength(T); i =
9、 pos;while ( i = n-m+1) SubString (sub, S, i, m);if (StrCompare(sub,T) != 0) +i ;else return i ; / while / ifreturn 0; / S中不存在与T相等的子串 / Index,串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。,串的基本操作和线性表有很大差别。在线性表的基本操作中,大多以“单个元素”作为操作对象;在串的基本操作中,通常以“串的整体”作为操作对象。,4.2 串的表示和实现,定长顺序存储表示 用一组地址连续的存储单元存储串值的字符序列堆分配存储表示 用一组地址
10、连续的存储单元存储串值的字符序列,但存储空间是在程序执行过程中动态分配而得。串的块链存储表示 链式方式存储,串有三种表示方法:,顺序存储,链式存储,用一组连续的存储单元来存放串,直接使用定长的字符数组来定义,数组的上界预先给出,故称为静态存储分配。,例如:#define MAXSTRLEN 255 /用户可用的最大串长typedef unsigned char SStringMAXSTRLEN1 ;SString S; /S是一个可容纳255个字符的顺序串。,一、定长顺序存储,一般用SString0来存放串长信息; C语言约定在串尾加结束符 0,但不计入串长; 若字符串超过MAXSTRLEN,
11、 则自动截断(因为静态数组存不进去)。,算法描述,两串连接Concat(&T,S1,S2) (算法4.2) 用T返回S1和S2连接成的新串.,Status Concat(SString / Concat,串的联接算法中需分三种情况处理:,T1S10 = S11S10;TS10+1S10+S20 = S21S20;T0 = S10+S20; uncut = TRUE; ,if (S10+S20 = MAXSTRLEN) / 未截断,else if (S10 MAXSTRLEN / 截断,else / 截断(仅取S1),T1S10 = S11S10; TS10+1MAXSTRLEN =S21MAX
12、STRLENS10; T0 = MAXSTRLEN; uncut = FALSE; ,T0MAXSTRLEN = S10MAXSTRLEN;uncut = FALSE; ,求子串 SubString(&Sub,S,pos,len) 将串S中从第pos个字符开始长度为len的字符序列复制到串Sub中(注:串Sub的预留长度与S一样),求子串函数SubString(&Sub, S, pos, len),Status SubString(SString ,讨论:想存放超长字符串怎么办?静态数组有缺陷!,改用动态分配的一维数组,“堆”!,思路:利用malloc函数合理预设串长空间。 特点: 若在操作中
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 PPT
