数据结构——串学生讲解反转课堂.pptx
《数据结构——串学生讲解反转课堂.pptx》由会员分享,可在线阅读,更多相关《数据结构——串学生讲解反转课堂.pptx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录content03040201串及其运算串的存储结构及实现串的模式匹配实例分析第1页/共45页串的应用程序设计中的源程序、目标程序事物处理程序中,顾客姓名、地址、货物的产地、名称软件系统方面的字符编辑、情报检索、词法分析等多入侵检测系统 DNA序列检测 第2页/共45页串的定义 由零个或多个字符组成的有限序列,一般记作:S=a1a2a3an(1)S为串的名字(2)单引号括起来的字符序列为串的值将串值括起来的单引号本身不属于串,它的作用是避免串与常数或与标识符混淆123 123La La(3)ai(1in)可以是字母、数字或其他字符(4)n为串中字符的个数,称为串的长度特殊的线性表,数据元素
2、限制为字符集第3页/共45页(1)空串(2)空白串(3)子串(4)主串(7)位置(8)相等串(5)前缀子串、真前缀子串(6)后缀子串、真后缀子串(9)模式匹配长度为0的串,不包含任何字符仅由一个或多个空格组成的串,长度1是长度为0的空串 长度为1的空白串串中任意个连续字符组成的子序列包含子串的串空串?自身?B=datastructureA=dataC=data structure字符在串中的序号 子串在主串中的位置?两个串的长度相等 每个对应位置字符相等子串从主串的某一位置开始,其在主串中首次出现的位置ddadatadatadataatataD=structure主串:A=abcaabcaaa
3、bc 子串:B=bca 子串B在主串中,从第1个位置开始的位置是:子串B在主串中,从第2个位置开始的位置是:26第4页/共45页串的基本运算串的抽象数据类型定义:ADT String数据对象:数据关系:基本操作:ADT StringD=ai|aiCharacterSet,i=1,2,n,n0R=|ai-1,aiD,i=2,3,nStrAssign(S,chars)StrCopy(S,T)StrLength(S)StrInsert(S,pos,T)StrDelete(S,pos,len)StrCompare(S,T)StrCat(S,T)SubString(T,S,pos,len)StrInde
4、x(S,pos,T)StrReplace(S,T,V)StrEmpty(S)StrClear(S)StrDestory(S)这些串的基本操作通常以“串的整体”“串的一部分”作为操作对象第5页/共45页串的基本运算 对于以上串的基本操作,C语言的函数库文件 string.h 包括其中几个字符串操作函数:gets(S)输入字符串puts(S)输出字符串strcat(S1,S2)连接字符串S2至S1后strcmp(S1,S2)比较字符串S1和S2strcpy(S1,S2)复制字符串S2至S1strlen(S)求字符串S的有效长度第6页/共45页串的基本运算StrInsert(S,pos,T)例:S=
5、chater,T=rac,运行StrInsert(S,4,T)在字符串S的第pos个字符之前插入字符串T串S和串T存在,1posStrLength(S)+1操作结果:初始条件:结果:S=character第7页/共45页串的基本运算StrDelete(S,pos,len)例:S=chapter,运行StrDelete(S,5,3)从串S中删除从第pos个字符开始连续len个字符后形成的子串串S存在,1posStrLength(S)-len+1操作结果:初始条件:结果:S=chap第8页/共45页串的基本运算StrCat(S,T)例:S=man,运行StrCat(S,kind)将字符串T的值连接
6、在串S的后面串S和串T存在操作结果:初始条件:结果:S=mankind第9页/共45页串的基本运算SubString(T,S,pos,len)例:S=commander,运行SubString(T1,S,4,3)截取字符串S中从第pos个字符开始连续len个字符形成的子串,并赋值给串T串S存在,1posStrLength(S)且0lenStrLength(S)-pos+1操作结果:初始条件:结果:T1=man运行SubString(T2,S,5,0)运行SubString(T3,S,4,7)结果:T2=结果 T3无结果,函数返回错误第10页/共45页串的基本运算StrIndex(S,pos,T
7、)例:S=abcaabcaaabc,T=bca,运行StrInsert(S,1,T)若字符串S从第pos个字符后存在与字符串T相等的子串,则返回字符串T在串S中第pos个字符后首次出现的位置,否则返回0串S和串T存在,1posStrLength(S)操作结果:初始条件:结果:2运行StrInsert(S,4,T)结果:6第11页/共45页串的基本运算StrReplace(S,T,V)例:S=abcaabcaaabca,T=bca,若V=x运行StrReplace(S,T,V)用字符串V替换字符串S中出现的所有与串T相等的不重叠的子串串S和串V存在,且串T为非空串操作结果:初始条件:结果:S=a
8、xaxaax若V=bc运行StrReplace(S,T,V)结果:S=abcabcaabc第12页/共45页串的存储结构及实现1.定长顺序串2.堆串3.块链串 与线性表的顺序存储结构类似,使用一组地址连续的与线性表的顺序存储结构类似,使用一组地址连续的存储单元存储串的字符序列,也称为存储单元存储串的字符序列,也称为静态存储分配静态存储分配的顺的顺序串。直接使用序串。直接使用定长的字符数组定长的字符数组来定义。来定义。与定长顺序串类似,都是用一组地址连续的存储单元与定长顺序串类似,都是用一组地址连续的存储单元存储串的字符序列,存储串的字符序列,不同不同的是:其存储空间是的是:其存储空间是动态分配
9、动态分配的的 采用采用链式链式存储结构,链表的每个节点可存放一个或多存储结构,链表的每个节点可存放一个或多个字符,每个节点称为个字符,每个节点称为块块第13页/共45页串的存储结构及实现定长顺序串#define MAXLEN 50typedef struct char chMAXLEN+1;int len ;SString;存储结构截断 串的实际长度在预定义长度MAXLEN的范围内随意变动时,超过MAXLEN,串值被舍去的情况字符串长度 0 或者 len ,此时0号单元格不用第14页/共45页串的存储结构及实现定长顺序串串插入函数Case 1 插入后串长MAXLEN 在进行串的插入时,插入位置
10、pos将位置分为两部分,记为A、B,长度分别为LA、LB,记插入部分为T,长度为LTCase 2 插入后串长MAXLEN,且pos+LTMAXLENCase 3 插入后串长MAXLEN,且pos+LTMAXLEN第15页/共45页串的存储结构及实现定长顺序串串插入函数int SStrInsrt (SString *S ,int pos ,const SString T)int i ;if(NULL=S|NULL=S-ch|NULL=T.ch|pos S-len+1)return 0 ;return 1;if(S-len+T.lenlen+T.len;i pos+T.len;i-)S-chi=S
11、-chi-T.len;for(i=pos;i chi=T.chi-pos+1;S-len=S-len+T.len;else if(pos+T.lenMAXLEN;i pos+T.len;i-)S-chi=S-chi-T.len;for(i=pos;i chi=T.chi-pos+1;S-len=MAXLEN;else for(i=pos;ichi=T.chi-pos+1;S-len=MAXLEN;#define MAXLEN 50typedef struct char chMAXLEN+1;int len ;SString;第16页/共45页串的存储结构及实现定长顺序串串删除函数int SSt
12、rDelete (SString *S ,int pos ,int len)int i=1;if(NULL=S|NULL=S-ch|len 0|pos S-len-len+1)return 0 ;return 1;for(i=pos;ilen-len;i+)S-chi=S-chi+len;S-len=S-len-len;#define MAXLEN 50typedef struct char chMAXLEN+1;int len ;SString;第17页/共45页串的存储结构及实现定长顺序串串连接函数Case 1 连接后串长MAXLEN 在进行串的连接时,假设原始串为S,长度为LS,待连接串
13、为T,长度为LTCase 2 连接后串长MAXLEN,且LAch|NULL=T.ch)return 0 ;else return 0;if(S-len+T.lenlen+1;ilen+T.len;i+)S-chi=T.chi-S-len;S-len=S-len+T.len;return 1;else if(S-lenlen+1;ichi=S-chi-S-len;S-len=MAXLEN;return 0;#define MAXLEN 50typedef struct char chMAXLEN+1;int len ;SString;第19页/共45页串的存储结构及实现定长顺序串求子串函数int
14、 SubSString (SString *T,SString S ,int pos ,int len)int i=1;if(NULL=T|NULL=T-ch|len 0|pos S-len|NULL=S.ch|lenS.len pos+1)return 0 ;for(i=1;ichi=S.chpos+i-1;T-len=len;return 1;弊端:截断问题第20页/共45页串的存储结构及实现堆串 不限定串的最大长度,动态地分配串值的存储空间,只要存储空间能分配成功,则在操作的过程中就不会出现“截断”的情况。存储结构:typedef struct char *ch;int len;HStr
15、ing;串初始化函数:void HStrInt(HString*S)S-ch=NULL;S-len=0;第21页/共45页串的存储结构及实现堆串串赋值函数:typedef struct char *ch;int len;HString;int HStrAssign(HString*S,const char*chars)int i=0;if(NULL=chars|NULL=S)return 0;while(charsi!=0)i+;S-len=i;if(0!=S-len)if(S-ch!=NULL)free(S-ch);S-ch=(char*)malloc(S-len+1)*sizeof(cha
16、r);if(NULL=S-ch)return 0;for(i=1;ilen;i+)S-chi=charsi-1;else S-ch=NULL;return 1;第22页/共45页串的存储结构及实现堆串 typedef struct char *ch;int len;HString;串插入函数:int HStrInsert(HString*S,int pos,const HString T)int i;char*temp;if(NULL=S|NULL=S-ch|NULL=T.ch|posS-len|poslen+T.len+1)*sizeof(char);if(NULL=temp)return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 学生 讲解 反转 课堂
限制150内