- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法;第4章 串; 在非数值处理、事务处理等问题常涉及到一系列的字符操作。计算机的硬件结构主要是反映数值计算的要求,因此,字符串的处理比具体数值处理复杂。本章讨论串的存储结构及几种基本的处理。;4.1 串类型的定义;注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。
子串(substring):串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。
子串的序号:将子串在主串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串中的序号(或位置)。
例如,设有串A和B分别是:
A=“这是字符串”,B=“是”
则B是A的子串,A为主串。B在A中出现了两次,其中首次出现所对应的主串位置是3。因此,称B在A中的序号为3 。; 特别地,空串是任意串的子串,任意串是其自身的子串。
串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。
通常在程序中使用的串可分为两种:串变量和串常量。
串常量和整常数、实常数一样,在程序中只能被引用但不能不能改变其值,即只能读不能写。通常串常量是由直接量来表示的,例如语句错误(“溢出”)中“溢出”是直接量。
串变量和其它类型的变量一样,其值是可以改变。;4.1.2 串的抽象数据类型定义 ;操作结果:将串t联结到串s后形成新串存放到s中。
StrLength(t)
初始条件:字符串t已存在。
操作结果:返回串t中的元素个数,称为串长。
SubString (s, pos, len, sub)
初始条件:串s, 已存在, 1≦pos≦StrLength(s)且 0≦len≦StrLength(s) –pos+1。
操作结果:用sub返回串s的第pos个字符起长度为len的子串。
……
} ADT String;4.2 串的存储表示和实现;4.2.1 串的定长顺序存储表示;1 串的联结操作
Status StrConcat ( StringType s, StringType t)
/* 将串t联结到串s之后,结果仍然保存在s中 */
{ int i, j ;
if ((s.length+t.length)MAX_STRLEN)
Return ERROR ; /* 联结后长度超出范围 */
for (i=0 ; it.length ; i++)
s.str[s.length+i]=t.str[i] ; /* 串t联结到串s之后 */
s.length=s.length+t.length ; /* 修改联结后的串长度 */
return OK ;
};2 求子串操作
Status SubString (StringType s, int pos, int len, StringType *sub)
{ int k, j ;
if (pos1||poss.length||len0||len(s.length-pos+1))
return ERROR ; /* 参数非法 */
sub-length=len-pos+1 ; /* 求得子串长度 */
for (j=0, k=pos ; k=leng ; k++, j++)
sub-str[j]=s.str[i] ; /* 逐个字符复制求得子串 */
return OK ;
};4.2.2 串的堆分配存储表示;1 串的联结操作
Status Hstring *StrConcat(HString *T, HString *s1, HString *s2)
/* 用T返回由s1和s2联结而成的串 */
{ int k, j , t_len ;
if (T.ch) free(T); /* 释放旧空间 */
t_len=s1-length+s2-length ;
if ((p=(char *)malloc(sizeof((char)*t_len))==NULL)
{ printf(“系统空间不够,申请空间失败 !\n”) ;
return ERROR ; }
for (j=0 ; js-length; j++)
T-ch[j]=s1-ch[j] ; /* 将串s复制到串T中 */;for (k=s1-length, j=0 ; js2-length; k++, j++)
T-ch[j]=s1-ch[j] ; /* 将串s2复制到串T中 */
free(s1-ch) ;
free(s2-ch) ;
r
您可能关注的文档
- 风湿性心脏病2015年4月概览.ppt
- 电子元件基本技能训练概览.ppt
- 风险的市场价格概览.ppt
- 《小木偶的故事》_人教版小语四上册试卷.ppt
- 风险分级管控与隐患治理(fl)概览.ppt
- 电子元件基础知识2概览.ppt
- 《小猫钓鱼》试卷.ppt
- 电子元件培训概览.ppt
- 《小猫钓鱼》课件试卷.ppt
- Power_Point使用技巧1案例.ppt
- 微型消防站技能竞赛理论考试题(附答案).doc
- 自考《课程与教学论》考试复习题(附答案).doc
- 2025年《解剖学》专升本考试复习题(附答案).doc
- 铁路列车员(初级)职业技能鉴定参考试题(附答案).doc
- 自考《设计原理》09235考试复习题(附答案).doc
- 《MarryMe》歌词文字超级动画.pptx
- 小学二年级语文删字换词阅读理解答题技巧PPT课件.pptx
- 2015款凯迪拉克XTS维修手册A168574-2890864.pdf
- 2025年中考英语写作常考文体提分培优复习专题11 启事类(解析版) .docx
- 2025年中考英语写作常考文体提分培优复习专题25学习与提升(原卷版) .docx
文档评论(0)