第4章-算法数据结构ppt课件.ppt





《第4章-算法数据结构ppt课件.ppt》由会员分享,可在线阅读,更多相关《第4章-算法数据结构ppt课件.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4 4章章 串串字符串一般简称串字符串一般简称串【学习目标】【学习目标】1.1.理解理解“串串”类型定义中各基本操作的特点,并能正确类型定义中各基本操作的特点,并能正确利用它们进行串的其它操作。利用它们进行串的其它操作。2.2.理解串类型的各种存储表示方法。理解串类型的各种存储表示方法。3.3.理解串匹配的各种算法。理解串匹配的各种算法。【重点和难点】【重点和难点】相对于其它各个知识点而言,本章非整个课程的重点,相对于其它各个知识点而言,本章非整个课程的重点,鉴于串已是多数高级语言中已经实现的数据类型,因此本鉴于串已是多数高级语言中已经实现的数据类型,因此本章重点仅在于了解串类型定义中各基
2、本操作的定义以及串章重点仅在于了解串类型定义中各基本操作的定义以及串的实现方法,并学会利用这些基本操作来实现串的其它操的实现方法,并学会利用这些基本操作来实现串的其它操作。本章的难点是理解实现串匹配的作。本章的难点是理解实现串匹配的KMP算法的思想,但算法的思想,但它不属本章学习的基本要求,更不是重点学习内容。它不属本章学习的基本要求,更不是重点学习内容。为何要单独讨论为何要单独讨论“串串”类型?类型?1 1)程序设计中,处理对象很多都是串类型。程序设计中,处理对象很多都是串类型。2 2)字符串操作比其他数据类型更复杂(如拷贝、字符串操作比其他数据类型更复杂(如拷贝、连接操作)。连接操作)。4
3、.1 4.1 串类型的定义串类型的定义 4.2 4.2 串的表示和实现串的表示和实现 4.3 4.3 串的模式匹配算法串的模式匹配算法4.1 4.1 串类型的定义串类型的定义4.1 4.1 串类型定义串类型定义 串串(string)string):即字符串,是由零个或多个字符即字符串,是由零个或多个字符组成的组成的有限序列有限序列。是是数据元素为单个字符数据元素为单个字符的特殊线性表。的特殊线性表。记为:记为:s =a1 a2.an (n0)串名串名串值(用串值(用 括起来)括起来)ai(0i n)可以是字母、数字或其它字符;可以是字母、数字或其它字符;4.1 4.1 串类型定义串类型定义长度
4、:长度:串中字符数目串中字符数目 n n 称为串的称为串的长度长度。空串:空串:长度为长度为 0 的字符称为的字符称为空串空串(Null string),我们用我们用表示表示“空串空串”。空格串:空格串:由一个或多个空格组成的串由一个或多个空格组成的串 称为称为空格串空格串(black string)。问:空串和空格串有无区别?问:空串和空格串有无区别?答:答:有区别有区别。空串空串(Null String)是指长度为零的串;是指长度为零的串;而空格串而空格串(Blank String),),是指包含一个或多个空格字是指包含一个或多个空格字符符 (空格键空格键)的字符串。它的长度为空格字符的个
5、数的字符串。它的长度为空格字符的个数空串是任意串的子串;任意串空串是任意串的子串;任意串S S都是自身的子串,都是自身的子串,除除S S本身外,本身外,S S的其它子串称为的其它子串称为“真子串真子串”4.1 4.1 串类型定义串类型定义子串子串:串:串 S 中任意个连续的字符组成的子序列叫中任意个连续的字符组成的子序列叫 S S 的子串的子串;主串主串:包含子串的串:包含子串的串 S 叫叫主串主串。字符位置字符位置:字符在串中的序号。:字符在串中的序号。子串位置子串位置:子串的第一个字符在主串中的序号。:子串的第一个字符在主串中的序号。串相等串相等:串长度相等,且对应位置上字符相等。:串长度
6、相等,且对应位置上字符相等。例例1 1:现有以下:现有以下4 4个字符串:个字符串:a=BEI b=JING c=BEIJING d=BEI JING问:问:他们各自的长度?他们各自的长度?a是哪个串的子串?在主串中的位置是多少?是哪个串的子串?在主串中的位置是多少?空串是哪个串的子串?空串是哪个串的子串?a a是不是自己的子串?是不是自己的子串?a=3,b=4,c=7,d=8a是是c和和d的子串,在的子串,在c和和d中的位置都是中的位置都是1 1C C语言中已有类似串运算函数语言中已有类似串运算函数串的抽象数据类型定义串的抽象数据类型定义ADT String 数据对象数据对象:D ai|ai
7、CharacterSet,i=1,2,.,n,n0 数据关系数据关系:R1|ai-1,ai D,i=2,.,n 基本操作基本操作:(教材(教材p71给出给出1313种基本操作种基本操作)StrAssign(&T,chars)/串赋值,生成值为串赋值,生成值为charschars的串的串T T StrCompare(S,T)/串比较,若串比较,若STST,返回值大于返回值大于00 StrLength(S)/求串长,即返回求串长,即返回S S的元素个数的元素个数 Concat(&T,S1,S2)/串连接,用串连接,用T T返回返回S1S1S2S2的新串的新串 SubString(&Sub,S,po
8、s,len)/求求S S中中pospos起长度为起长度为lenlen的子串的子串 Index(S,T,pos)/返回子串返回子串T T在在pospos之后的位置之后的位置 Replace(&S,T,V)/用子串用子串V V替换子串替换子串T T4.1 4.1 串类型定义串类型定义最最最最小小小小操操操操作作作作子子子子集集集集注:注:ConcatConcat操作操作concatenationconcatenation,把多个短字符串合并为长字符串把多个短字符串合并为长字符串复习:复习:C语言中常用的串运算语言中常用的串运算4.1 4.1 串类型定义串类型定义注:用注:用C C处理字符串时,要调
9、用标准库函数处理字符串时,要调用标准库函数#include串比较串比较:int strcmp(char*s1,char*s2);/StrCompare(S,T)求串长:求串长:int strlen(char*s);/StrLength(S)串连接:串连接:char strcat(char*to,char*from)/Concat(&T,S1,S2)子串子串T T定位:定位:char strchr(char*s,char*c);/Index(S,T,pos)4.1 4.1 串类型定义串类型定义可利用可利用串比较串比较、求串长和求子串等操作实现定、求串长和求子串等操作实现定位函数实现位函数实现In
10、dex(S,T,pos)算法的基本思想为:算法的基本思想为:StrCompare(SubString(S,i,StrLength(T),T)S 串串 T 串串 T 串串iposn-m+1n=StrLength(S)m=StrLength(T)4.1 4.1 串类型定义串类型定义算法描述:算法描述:int Index(String S,String T,int pos)/T为非空串。若主串为非空串。若主串S中第中第pos个字符之后存在与个字符之后存在与T T相等的子串,相等的子串,/则返回第一个这样的子串在则返回第一个这样的子串在S S中的中的 位置,否则返回位置,否则返回0 0 if(pos
11、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;/while/if return 0;/S中不存在与中不存在与T相等的子串相等的子串/IndexIndex(S,T,pos)/返回返回子串子串T T在主串在主串S S中第中第pospos之之后第一次出现的位置后第一次出现的位置例例1 1:设设 s=I AM A STUDENT,t=GOOD,q=WORKER。求:求:StrLength(s)StrLength(t)Sub
12、String(&sub,s,8,7)=SubString(&sub,t,2,1)=Index(s,A)=Index(s,t)=Replace(&s,STUDENT,q)=4.1 4.1 串类型定义串类型定义14 4STUDENTO30I AM A WORKER思考:思考:SubString(&sub,q,5,0)=长度为长度为 0 的子串为的子串为“合法合法”串串4.1 4.1 串类型定义串类型定义例例2 2:设设 s=I AM A STUDENT,t=GOOD,求:求:Concat(SubString(s,6,2),Concat(t,SubString(s,7,8)?解:因为解:因为SubS
13、tring(s,6,2)A;SubString(s,7,8)STUDENTConcat(t,SubString(s,7,8)GOOD STUDENT所以:所以:Concat(SubString(s,6,2),Concat(t,SubString(s,7,8)A GOOD STUDENT 4.2 4.2 串的表示和实现串的表示和实现4.24.2 串的表示和实现串的表示和实现串串的逻辑结构和的逻辑结构和线性表线性表极为相似,极为相似,区别区别仅在于仅在于串的串的数据对象约束为字符集。数据对象约束为字符集。串的基本操作和线性表有很大差别。串的基本操作和线性表有很大差别。在线性表的基本操作中,大多以在
14、线性表的基本操作中,大多以“单个元素单个元素”作为操作对作为操作对象;象;在串的基本操作中,通常以在串的基本操作中,通常以“串的整体串的整体”作为操作对象。作为操作对象。例如查找某子串,在主串某位置上插入一个子串等。例如查找某子串,在主串某位置上插入一个子串等。4.24.2 串的表示和实现串的表示和实现定长顺序存储表示定长顺序存储表示定长顺序存储表示定长顺序存储表示用一组地址连续的存储单元存储串值的字符序列用一组地址连续的存储单元存储串值的字符序列用一组地址连续的存储单元存储串值的字符序列用一组地址连续的存储单元存储串值的字符序列堆分配存储表示堆分配存储表示堆分配存储表示堆分配存储表示用一组地
15、址连续的存储单元存储串值的字符序列用一组地址连续的存储单元存储串值的字符序列用一组地址连续的存储单元存储串值的字符序列用一组地址连续的存储单元存储串值的字符序列,但存储空间是在程序执行过程中动态分配而得。但存储空间是在程序执行过程中动态分配而得。但存储空间是在程序执行过程中动态分配而得。但存储空间是在程序执行过程中动态分配而得。串的块链存储串的块链存储串的块链存储串的块链存储链式方式存储链式方式存储链式方式存储链式方式存储串有三种机内表示方法:串有三种机内表示方法:串有三种机内表示方法:串有三种机内表示方法:顺序顺序顺序顺序存储存储存储存储链式链式链式链式存储存储存储存储4.2.1 4.2.1
16、 定长顺序存储表示定长顺序存储表示用一组地址连续的存储单元来存放串值的字符序列。用一组地址连续的存储单元来存放串值的字符序列。为每个定义的变量分配为每个定义的变量分配固定长度固定长度存储区存储区#define MAXSTRLEN 255 /用户可在用户可在255以内定义最大串长以内定义最大串长 typedef unsigned char Sstring MAXSTRLEN+1;/0号单元存放串的长度号单元存放串的长度4.24.2 串的表示和实现串的表示和实现如:如:SStringSString x;x;x x是有是有256256个字符型变量的数组个字符型变量的数组 x0=5,x1=a,5 a
17、H c d B .串的实际长度可在这个予定义长度的范围内随意设定,超过串的实际长度可在这个予定义长度的范围内随意设定,超过予定义长度的串值则被舍去,称之为予定义长度的串值则被舍去,称之为“截断截断”4.2.1 4.2.1 定长顺序存储表示定长顺序存储表示1.串联接串联接Concat(&T,s1,s2)4.24.2 串的表示和实现串的表示和实现串的联接算法中需分三种情况处理串的联接算法中需分三种情况处理S10+S20MAXSTRLENS10 MAXSTRLEN,S10+S20MAXSTRLENS10=MAXSTRLENS1 sm s1 s2 S2 tn t1 t2 T sm+tn s1 s2 t
18、1 t2 T1.S10=S11.S10;TS10+1.MAXSTRLEN=S21.MAXSTRLENS10;T0=MAXSTRLEN;uncut=FALSE;4.24.2 串的表示和实现串的表示和实现 Status Concat(SString S1,SString S2,SString&T)/用用T返回由返回由S1和和S2联接而成的新串。若未截断联接而成的新串。若未截断,则返回则返回TRUE,/否则否则FALSE。return uncut;/Concat T1.S10=S11.S10;TS10+1.S10+S20=S21.S20;T0=S10+S20;uncut=TRUE;if(S10+S2
19、0=MAXSTRLEN)/未截断 else if(S10 MAXSTRSIZE)/截断 else /截断(仅取S1)T0.MAXSTRLEN=S10.MAXSTRLEN;/T0=S10=MAXSTRLEN uncut=FALSE;4.2.1 4.2.1 定长顺序存储表示定长顺序存储表示2.求子串求子串SubString(&Sub,S,pos,len)4.24.2 串的表示和实现串的表示和实现将串将串S S中从第中从第pospos个字符开始、长度为个字符开始、长度为lenlen的字符序列复制到串的字符序列复制到串SubSub中中(注:串注:串SubSub的预留长度与的预留长度与S S一样一样)s
20、=a1 a2.anposlenSub 讨论:在操作中出现串值序列长度超过上界讨论:在操作中出现串值序列长度超过上界MAXSIZE时,约定截尾法处理。若想存放时,约定截尾法处理。若想存放超长超长字符串怎么办?字符串怎么办?改用改用动态分配动态分配的一维数组的一维数组堆堆4.2.1 4.2.1 定长顺序存储表示定长顺序存储表示2.求子串求子串SubString(&Sub,S,pos,len)算法描述:算法描述:Status SubString(SString&sub,SString S,int pos,int len)if(posS0|lenS0-pos+1)return ERROR;/若若pos
21、pos和和lenlen参数越界,则告警参数越界,则告警 Sub1len=Spospos+len-1;Sub0=len;return OK;/4.24.2 串的表示和实现串的表示和实现子串长度子串长度4.24.2 串的表示和实现串的表示和实现4.2.2 4.2.2 堆分配存储表示堆分配存储表示仍用一组连续的存储单元来存放串,但存储空间是在程仍用一组连续的存储单元来存放串,但存储空间是在程序执行过程中序执行过程中动态分配动态分配而得。而得。通常,通常,C C语言中存在一个称之为语言中存在一个称之为“堆堆”的自由存储空间。提供的自由存储空间。提供的串类型就是以这种存储方式实现的。系统利用函数的串类型
22、就是以这种存储方式实现的。系统利用函数malloc()和和free()进行串值空间的进行串值空间的动态管理。动态管理。/=串的堆分配存储表示串的堆分配存储表示=typedef struct char*ch;/若是非空串若是非空串,则按串实际长度分则按串实际长度分/配存储区配存储区;否则否则 ch为为NULL int length;/串长度串长度 HString;301 11 A b c d e 1 2 w r A B 301x.ch x.length4.24.2 串的表示和实现串的表示和实现4.2.2 4.2.2 堆分配存储表示堆分配存储表示串插入操作:串插入操作:void StrInsert
23、(HString&S,int pos,HString T)/1posStrLength(S)1。在串在串 S S 的第的第 pos pos 个字符之前插入串个字符之前插入串 T Tif(posS.length+1)return ERROR;/pospos不合法则告警不合法则告警 if(T.length)/只要串只要串T T不空,就需要重新分配不空,就需要重新分配S S空间,以便插入空间,以便插入T T if(!(S.ch=(char*)realloc(S.ch,(S.length+T.length)*sizeof(char)exit(OVERFLOW);for(i=S.length-1;i=p
24、os-1;-i)/为插入为插入T T而腾出而腾出pospos之后的位置之后的位置 S.chi+T.length=S.chi;/从从S S的的pospos位置起全部字符均后移位置起全部字符均后移 S.chpos-1pos+T.length-2=T.ch0T.length-1;/插入插入T T S.length+=T.length;/刷新刷新S S串长度串长度 return OK;return OK;/StrInsert _HSqC C是指针变量,可以是指针变量,可以自增!意即每次后自增!意即每次后移一个数据单元。移一个数据单元。4.24.2 串的表示和实现串的表示和实现4.2.2 4.2.2 堆
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 ppt 课件

限制150内