第四、五章 串 数组和广义表.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第四、五章 串 数组和广义表.ppt》由用户(hyngb9260)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四、五章 数组和广义表 第四 数组 广义
- 资源描述:
-
1、第四章第四章 串串4.1 4.1 串类型的定义串类型的定义4.2 4.2 串的表示和实现串的表示和实现4.3 4.3 串的模式匹配串的模式匹配x 的值为整数的值为整数 123。x 的值为字符串的值为字符串 123。串的串的 串的串的 串的串的 4.1 串类型的定义 是由是由 0 个或多个字符组成的有限序列。个或多个字符组成的有限序列。通常记为:通常记为:s=“a1 a2 a3 ai an”(n0)。字母、数字或其他字符字母、数字或其他字符 必须有!必须有!不属于串!不属于串!作用:避免与作用:避免与变量名变量名或或数的常量数的常量混淆。混淆。例:例:x=“123”x=123 test=“tes
2、t”基本概念基本概念 不含任何字符的串,串长度不含任何字符的串,串长度=0,用符号,用符号 表示表示。仅由一个或多个空格组成的串。仅由一个或多个空格组成的串。由串中由串中任意任意个个连续连续的字符组成的子序列。的字符组成的子序列。例:例:S=“JINAN”S1=“”、S2=“NA”、S=“JINAN”包含子串的串。包含子串的串。字符在序列中的序号。字符在序列中的序号。子串在主串中的位置是子串的子串在主串中的位置是子串的在主串中的位置。在主串中的位置。子串。子串。S4=“JAN”非子串(非子串(非非串串 S 中的中的连续连续字符所组成)。字符所组成)。在在 S 中的位置:中的位置:3 在在 S
3、中的位置:中的位置:1 当两个串的长度相等且各个对应位置的字符都当两个串的长度相等且各个对应位置的字符都 相等时才相等。相等时才相等。例:例:S=“JINAN”S1=“JI NAN”S S1 空串是任意串的子串,任意串是其自身的子串。空串是任意串的子串,任意串是其自身的子串。和线性表极为相似。和线性表极为相似。和线性表有很大差别。和线性表有很大差别。区别:区别:串的数据对象约定是串的数据对象约定是字符集字符集。在线性表的基本操作中,大多以在线性表的基本操作中,大多以“单个元素单个元素”作为操作对象;作为操作对象;在串的基本操作中,通常以在串的基本操作中,通常以“串的整体串的整体”作为作为 操作
4、对象。操作对象。例如:在串中查找某个子串、求例如:在串中查找某个子串、求 取一个子串、在串的某个位置上插入一个子取一个子串、在串的某个位置上插入一个子 串以及删除一个子串等。串以及删除一个子串等。串的抽象数据类型的定义串的抽象数据类型的定义 ADT String 数据对象:数据对象:D ai|ai,i=1,2,.,n,n0 数据关系:数据关系:R1|ai-1,ai D,i=2,.,n 基本操作:基本操作:初始条件:初始条件:chars 是字符串常量。是字符串常量。操作结果:操作结果:把把 chars 赋为赋为 T 的值。的值。初始条件:初始条件:串串 S 存在。存在。操作结果:操作结果:由串由
5、串 S 复制得串复制得串 T。初始条件:初始条件:串串 S 存在。存在。操作结果:操作结果:串串 S 被销毁。被销毁。初始条件:初始条件:串串 S 存在。存在。操作结果:操作结果:若若 S 为空串,则返回为空串,则返回 TRUE,否则返回,否则返回 FALSE。初始条件:初始条件:串串 S 和和 T 存在。存在。操作结果:操作结果:若若 S T,则返回值,则返回值 0;若若 S=T,则返回值,则返回值=0;若若 S T,则返回值,则返回值 0。“串值大小串值大小”是按是按“词典次序词典次序”进行比较的,如:进行比较的,如:StrCompare(“data”,“stru”)0 初始条件:初始条件
6、:串串 S 存在。存在。操作结果:操作结果:返回返回 S 的元素个数,称为串的长度。的元素个数,称为串的长度。初始条件:初始条件:串串 S1 和和 S2 存在。存在。操作结果:操作结果:用用 T 返回由返回由 S1 和和 S2 联接而成的新串。联接而成的新串。初始条件:初始条件:串串 S 存在,存在,1posStrLength(S)且且 0lenStrLength(S)pos+1。操作结果:操作结果:用用 Sub 返回串返回串 S 的第的第 pos 个字符起长度个字符起长度 为为 len 的子串。的子串。子串为子串为“串串”中的一个字符子序列中的一个字符子序列例如:例如:SubString(s
7、ub,commander,4,3)求得求得 sub=man ;SubString(sub,commander,1,9)求得求得 sub=commander;SubString(sub,commander,9,1)求得求得 sub=r;初始条件:初始条件:串串 S 和和 T 存在,存在,T 是非空串,是非空串,1posStrLength(S)。操作结果:操作结果:若主串若主串 S 中存在和串中存在和串 T 值相同的子串,则返回值相同的子串,则返回 它在主串它在主串 S 中第中第 pos 个字符之后第一次出现的个字符之后第一次出现的 位置;否则函数值为位置;否则函数值为 0。(。(见例子见例子)初
8、始条件:初始条件:串串 S、T 和和 V 存在,存在,T 是非空串。是非空串。操作结果:操作结果:用用 V 替换主串替换主串 S 中出现的所有与中出现的所有与 T 相等的相等的 的子串。的子串。假设假设 S=“abcacabcaca”,T=“abca”V=“ab”,则置换之后的则置换之后的 S=“abcabca”,而不是而不是“abbca”。假设 S=abcaabcaaabc,T=bcaIndex(S,T,1)=2;Index(S,T,3)=6;Index(S,T,8)=0;“子串在主串中的位置子串在主串中的位置”意指子串中的第一个字符在主串中的位序位序。Index(S,T,pos)返回子串子
9、串T在主串 S 中第pos个字符之后第一次出现的位置 初始条件:初始条件:串串 S 和和 T 存在,存在,1posStrLength(S)1。操作结果:操作结果:在串在串 S 的第的第 pos 个字符之前插入串个字符之前插入串 T。初始条件:初始条件:串串 S 存在,存在,1posStrLength(S)-len+1。操作结果:操作结果:从串从串 S 中删除第中删除第 pos 个字符起长度为个字符起长度为 len 的子串。的子串。初始条件:初始条件:串串 S 存在。存在。操作结果:操作结果:将将 S 清为空串。清为空串。ADT String 在以上操作中,串赋值在以上操作中,串赋值 StrAs
10、sign、串比较、串比较 StrCompare、求、求 串长串长 StrLength、串联接、串联接 Concat 以及求子串以及求子串 SubString 等五种操等五种操 作构成串类型的最小操作子集,即作构成串类型的最小操作子集,即。除串清除除串清除 ClearString 和串销毁和串销毁 DestroyString 以外的其他串以外的其他串 操作均可在最小操作子集上实现。操作均可在最小操作子集上实现。例如,例如,可利用判等、求串长和求子串等操作实现定位函数可利用判等、求串长和求子串等操作实现定位函数 Index(S,T,pos):在主串:在主串 S 中取从第中取从第 i(i 的初值为的
11、初值为pos)个字符)个字符 起、长度和串起、长度和串 T 相等的子串同串相等的子串同串 T 比较,若相等,则求得函数比较,若相等,则求得函数 值为值为 i,否则,否则 i 值增值增 1,直至串,直至串 S 中从第中从第 i 个字符起直到串尾的个字符起直到串尾的 子串长度小于串子串长度小于串 T 的长度为止。的长度为止。int Index(String S,String T,int pos)/T 为非空串。若为非空串。若 S 中第中第 pos 个字符之后存在与个字符之后存在与 T 相等的子相等的子 /串,则返回第一个这样的子串在串,则返回第一个这样的子串在 S 中的位置,否则返回中的位置,否则
12、返回 0。if(pos 0)n=StrLength(S);m=StrLength(T);/求串长求串长 i=pos;while(i=n-m+1)SubString(sub,S,i,m);if(StrCompare(sub,T)!=0)+i;else return i;/找到和找到和 T 相等的子串相等的子串 /while /if return 0;/S 中不存在满足条件的子串中不存在满足条件的子串 /Index 4.2 串的表示和实现 因为串是特殊的线性表,故其存储结构与线性表的存储结构因为串是特殊的线性表,故其存储结构与线性表的存储结构 类似,只不过类似,只不过。4.2.1 定长顺序存储表示
13、 定长顺序存储表示定长顺序存储表示,也称为,也称为静态存储分配的顺序串静态存储分配的顺序串。它是。它是 用一组用一组的存储单元来的存储单元来串中的字符序列。串中的字符序列。“定长定长”、“静态静态”的意思可简单地理解为一个确定的存储空的意思可简单地理解为一个确定的存储空 间,它的长度是不变的。间,它的长度是不变的。可直接使用定长的字符数组来定义一个串,可直接使用定长的字符数组来定义一个串,数组的上界数组的上界 预先给出:预先给出:#define maxstrlen 255 /可在可在 255 以内定义最大串长。以内定义最大串长。typedef unsignde char sstringmaxs
14、trlen+1;/0 号单元存放串的长度。号单元存放串的长度。串的实际长度可在这个预定义长度的范围内随意设定,串的实际长度可在这个预定义长度的范围内随意设定,超过预定义长度的串值则被舍去,称之为超过预定义长度的串值则被舍去,称之为“截断截断”。例:对于串例:对于串 ch=“This is a dog.”用上述一方法表示为:用上述一方法表示为:T h i s i s a d o g .0 14 T h i s i s a d o g .的两种表示方法:的两种表示方法:一:是在串的存贮区首地址一:是在串的存贮区首地址记录串的长度。记录串的长度。二:是二:是,在串之后加入一个串的结束标志。,在串之后
15、加入一个串的结束标志。PASCAL 语言中的串类型就采用这种方法。语言中的串类型就采用这种方法。如如 C 中使用中使用“0”,“0”不计入串长。不计入串长。同样对于串同样对于串 ch=“This is a dog.”用上述二方法表示为:用上述二方法表示为:定长顺序存储表示时串的操作的实现定长顺序存储表示时串的操作的实现 1、串联接、串联接 Concat(&T,S1,S2)假设串假设串 T 是由串是由串 S1 联结串联结串 S2 得到的,则只要进行相应的得到的,则只要进行相应的“串值复制串值复制”操作即可,需要时进行操作即可,需要时进行“截断截断”。串串 T 值值 S10+S20 MAXSTRL
16、EN S10 MAXSTRLEN S10=MAXSTRLEN Status Concat(SString&T,SString S1,SString S2)/未截断未截断 T1.S10=S11.S10;TS10+1.S10+S20=S21.S20;T0=S10+S20;uncut=TRUE;/截断截断 T1.S10=S11.S10;TS10+1.MAXSTRLEN=S21.MAXSTRLENS10;T0=MAXSTRLEN;uncut=FALSE;/截断截断(仅取仅取S1)T0.MAXSTRLEN=S10.MAXSTRLEN;uncut=FALSE;return uncut;/Concat 串联
17、接串联接 Concat 算法描述算法描述 2、求子串、求子串 SubString(&Sub,S,pos,len)求子串的过程即为复制字符序列的过程,将串求子串的过程即为复制字符序列的过程,将串 S 中的第中的第 pos 个字符开始的长度为个字符开始的长度为 len 的字符串复制到的字符串复制到 串串 Sub 中。中。1)、不会出现、不会出现“截断截断”的情况。的情况。2)、可能出现、可能出现“参数非法参数非法”的情况,应返回的情况,应返回 ERROR。Status SubString(SString&Sub,SString S,int pos,int len)if(pos S0|len S0-
18、pos+1)return ERROR;Sub1len=Spospos+len-1;Sub0=len;return OK;/SubString 求子串求子串 SubString 算法描述算法描述 仍以一组地址连续的存储单元存放串值字符序列,但存储空间是在程序执行过程中动态分配而得4.2.2 堆分配存储表示mallocmalloc()()合理预设串长空间;若串长改变,合理预设串长空间;若串长改变,使用使用reallocrealloc()()按新串长度增加空间按新串长度增加空间Typedef struct char*ch;int length;HString;/若非空串,按串长分配空间;否则若非空串
19、,按串长分配空间;否则chch=NULL=NULL/串长度串长度4.2 串的表示和实现例:用堆分配存储方式实现串插入操作(参见教材参见教材P75)P75)Status StrInsert(HString&S,int pos,HString T)/在串在串S S的第的第pospos个字符之前(包括尾部)插入串个字符之前(包括尾部)插入串T T/StrInsert if(posS.length+1)Return ERROR;/pos/pos不合法则警告不合法则警告if(T.length)/只要串只要串T T不空,就需要重新分配不空,就需要重新分配S S空间,以便插入空间,以便插入T T retur
20、n OK;if(!(S.ch=(char)*realloc(S.ch,(S.length+T.length)*sizeof(char)exit(OVERFLOW);/若开不了新空间,则退出若开不了新空间,则退出for(i=S.length-1;i=pos-1;-i)/为插入为插入T T而腾出而腾出pospos之后的位置,即从之后的位置,即从S S的的pospos位置起全部字符均后移位置起全部字符均后移 S.chi+T.length=S.chi;S.chpos-1.pos+T.length-2=T.ch0.T.length-1;/插入插入T TS.length+=T.length;/刷新刷新S
21、S串长度串长度4.2 串的表示和实现4.2.3 串的块链存储表示headABIC例:例:S=ABCDEFGHI 链表结点大小为1 链表结点大小为4headABCDE F G HI#法法1 1存储密度为存储密度为1/21/2;法;法2 2存储密度为存储密度为9/15=3/59/15=3/5存储密度存储密度=串值所占的存储位串值所占的存储位实际分配的存储位实际分配的存储位4.2 串的表示和实现4.3 串的模式匹配算法 模式匹配模式匹配:子串定位运算。子串定位运算。(串匹配串匹配)用函数用函数 Index(S,T,pos)实现。实现。在在串匹配串匹配中中,将将主串主串 S 称为称为目标目标(串串),
22、子串子串 T 称为称为模式模式(串串)。如果在如果在主串主串 S 中能够找到中能够找到子串子串 T,则则称称,第一第一 个和个和子串子串 T 中第一个字符相等的字符在中第一个字符相等的字符在主串主串 S 中的中的;否则否则,称称,。当用当用模式模式依次从依次从目标目标的头部往后移,移到的位置就的头部往后移,移到的位置就 叫叫,每次移动后要看,每次移动后要看模式模式里的字符和里的字符和目标目标中相应的中相应的 字符是否相等,若都相等,这次位移就叫字符是否相等,若都相等,这次位移就叫(其(其 实就是从这个位置开始的实就是从这个位置开始的匹配成功匹配成功),否则叫),否则叫。模式匹配模式匹配是各种处
23、理系统中最重要的操作之一,也是各种处理系统中最重要的操作之一,也 是一个比较复杂的串操作。模式匹配的算法不同,效率是一个比较复杂的串操作。模式匹配的算法不同,效率 将有很大差别。同一算法应用不同,效率亦有很大差别。将有很大差别。同一算法应用不同,效率亦有很大差别。朴素的模式匹配算法朴素的模式匹配算法 算法思想:算法思想:从从主串主串 S 的第的第 pos 个字符起和个字符起和模式模式 T 的第一个字符比较之,的第一个字符比较之,若相同,则继续比较后续字符;否则从若相同,则继续比较后续字符;否则从主串主串 S 的下一个字符起再的下一个字符起再 重新和重新和模式模式 T 的字符比较之。的字符比较之
24、。例:例:S=JINANSHI,T=NAN。J INAN SH INAN不匹配不匹配 N A N不匹配不匹配 N A N匹配匹配 N A N匹配匹配 匹配匹配 3 第一趟匹配第二趟匹配第三趟匹配第四趟匹配第五趟匹配第六趟匹配a b a b c a b c a c b a ba b a b c a b c a c b a ba b a b c a b c a c b a ba b a b c a b c a c b a ba b a b c a b c a c b a ba b a b c a b c a c b a ba b c a ca b c a ca b c a ca b c a ca
25、b c a ca b c a c4.3.1(BF)匹配算法算法思想:算法思想:用子串T中的字符依次与主串S中的字符比较:若不匹配,将T右移一个字符,从头开始与S中字符依次比较;如此反复执行,直到匹配成功或者一直将T移到无法与S继续比较为止,则匹配失败。子串T主串S当采用定长顺序存储结构时,实现此操作的算法如下:当采用定长顺序存储结构时,实现此操作的算法如下:int Index(SString S,SString T,int pos)/返回子串返回子串 T 在主串在主串 S 中第中第 pos 个字符之后的位置。个字符之后的位置。/若不存在,则函数值为若不存在,则函数值为 0。/其中,其中,T 非
展开阅读全文