- 5
- 0
- 约4.38千字
- 约 26页
- 2021-10-25 发布于广东
- 举报
串的基本概念 第一页,共26页 串的抽象数据定义:P71 对于串的基本操作集可以有不同的定义方法,读者在使用高级语言中的串类型时,应该以语言的参考手册为准。 定位算法(P72) —— Index(S,T,pos) 第二页,共26页 4.2 串的表示和实现 对串的存储方式取决于我们对串所进行的运算,如果在程序设计语言中,串的运算只是作为输入或输出的常量出现,则此时只需存储该串的字符序列,这就是串值的存储。此外,一个字符序列还可赋给一个串变量,操作运算时通过串变量名访问串值。 串的3种机内表示方式: 定长顺序存储表示 堆分配存储表示 串的块链存储表示 第三页,共26页 4.2.1 定长顺序存储表示 实现:用一组地址连续的存储单元存储串值的字符序列。 存储表示 #define MAXSTRLEN 255 Typedef unsigned char String[MAXSTRLEN+1] 截断——超过与定义长度的串值被舍去。 串长的两种表示: 下标为0的分量存放串的实际长度,如:pascal 在串尾加一个不计入串长的结束标记符。如:C中的‘\0’ 第四页,共26页 串连接算法Concat(T,S1,S2) Status Concat(SString T, SString S1,SString S2){ //用T返回由S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE。S[0] //保存串的长度,有三种情况(1)S1[0]+S2[0]=MAXSTRLEN;(2)S1[0]MAXSTRLEN //S1[0]+S2[0]MAXSTRLEN;(3)S1[0]=MAXSTRLEN If(S1[0]+S2[0]=MAXSTRLEN{//未截断 T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..S1[0]+S2[0]]=S2[1..S2[0]]; T[0]=S1[0]+S2[0];uncut=TRUE;} else if(S1[0]MAXSTRLEN){//截断 T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN]=S2[1..MAXSTRLEN-S1[0]]; T[0]=MAXSTRLEN;uncut=FALSE;} else{//截断,仅取S1 T[0..MAXSTRLEN]=S1[0..MAXSTRLEN];uncut=FALSE; } return uncut; } 第五页,共26页 求子串算法SubString(Sub,S,pos,len) 串操作特点: 原操作为——字符序列的复制 操作的时间复杂度基于复制序列的长度 截断处理 Status SubString(SString Sub,SString S,int pos,int len){ //用Sub返回串的第pos个字符起长度为len的子串,其中//1=pos=StrLength(s)0=len=StrLength(s)-pos+1 if(pos1||posS[0]||len0||lenS[0]-pos+1 return ERROR; Sub[1..len]=S[pos..pos+len-1]; Sub[0]=len;return OK; } 第六页,共26页 串的动态存储结构 串的各种运算与串的存储结构有着很大的关系,在随机取子串时,顺序存储方式操作起来比较方便,而对串进行插入、删除等操作时,就会变得很复杂。因此,有必要采用串的动态存储方式。 串的动态存储方式采用堆存储结构和链式存储结构两种形式: 4.2.2堆存储结构 特点 仍以一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配的。 在C语言中,存在一个称为“堆”的自由空间,由动态分配函数malloc( )分配一块实际串长所需的存储空间,如果分配成功,则返回这段空间的起始地址,作为串的基址。由free( )释放串不再需要的空间。 存储结构: typedef struct{ char *ch; //若是非空串,按串长分配空间,否则ch为NULL int length; //串长 } HString; 第七页,共26页 基本算法(P76-77) 举例:串插入操作 Status StrAssign(HString T,char* chars);//生成一个值等于串常量chars的串T Int StrLength(HString S);//返回串S的元素个数,称为串的长度 Int StrCompare(HString S,HString T);//若ST,返回值0,若S=T,返回值=0,若ST,返回值0 Status ClearString(HString S);//将S清为空串,并释放S所占
您可能关注的文档
最近下载
- 肝癌介入治疗.pdf VIP
- FTM-400XDR_中文使用说明书.pdf
- 2025年苏州健雄职业技术学院单招笔试职业技能考核试题库含答案解析.docx VIP
- (正式版)DB33∕T 1072-2019 《泡沫玻璃外墙外保温系统应用技术规程》.docx VIP
- 第一单元1 珍稀动物课件2026春湘美版美术三年级下册.pptx VIP
- 人教版六年级数学下册第二单元《百分数(二)——成数问题》专项练习(含答案).docx VIP
- DB61_T 1560.2-2022 公路钢结构梁桥制造安装与质量检验规范 第2部分:安装要求.docx VIP
- 03分布式光伏发电工程可行性研究设计导则.docx VIP
- 2026春统编版(五四制)(新教材)小学道德与法治三年级下册《一切靠劳动》课时练习及答案.docx VIP
- 宽QRS波群心动过速的鉴别诊断课件.ppt VIP
原创力文档

文档评论(0)