- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章节 串新
* typedef struct { char *ch; // 若是非空串,则按串实用长度分配 //存储区,否则 ch 为NULL int length; // 串长度 } HString; 二、串的堆分配存储表示 * 通常,C语言中提供的串类型就是以这种存储方式实现的。系统利用函数malloc( ) 和 free( ) 进行串值空间的动态管理,为每一个新产生的串分配一个存储区,称串值共享的存储空间为“堆”。 C语言中的串以一个空字符为结束符, 串长是一个隐含值。 这类串操作实现的算法为: 先为新生成的串分配一个存储空间,然后 进行串值的复制。 * 三、串的块链存储表示 也可用链表来存储串值,由于串的数据元素是一个字符,它只有 8 位二进制数,因此用链表存储时,通常一个结点中存放的不是一个字符,而是一个子串。 存储密度 = 数据元素所占存储位 实际分配的存储位 * #define CHUNKSIZE 80 // 由用户定义块大小 typedef struct Chunk { // 结点结构 char ch[CUNKSIZE]; struct Chunk *next; } Chunk; typedef struct { // 串的链表结构 Chunk *head, *tail; // 串的头和尾指针 int curlen; // 串的当前长度 } LString; * 例如: 在编辑系统中,整个文本编辑区可以看成是一个串,每一行是一个子串,构成一个结点。即: 同一行的串用定长结构(80个字符), 行和行之间用指针相联接。 实际应用时,可以根据问题所需来设置结点的大小。 * 这是串的一种重要操作,很多软件,若有“编辑”菜单项的话,则其中必有“查找”子菜单项。 串的模式匹配算法 * 思考: 你设计的搜索引擎(www.google_?)中, 又会用什么算法呢? 你设计的字处理软件中, 会用什么算法实现 查找指定文本? * 初始条件:串 S 和 T 存在,T 是非空串, 1≤pos≤StrLength(S)。 回忆一下串匹配(查找)的定义: INDEX (S, T, pos) 操作结果:若主串 S 中存在和串 T 值 相同的子串返回它在主串 S 中 第 pos 个字符之后第一次出现 的位置; 否则函数值为0。 * int Index (String S, String T, int pos) { // T为非空串。若主串S中第pos个字符之后存在与 T相等的子串,则返回第一个 这样的子串在S中的 位置,否则返回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 ; } // while } // if return 0; // S中不存在与T相等的子串 } // Index * 下面讨论以定长顺序结构 表示串时的几种算法。 一、简单算法 二、KMP(D.E.Knuth,V.R.Pratt, J.H.Morris) 算法 * S 串 T 串 T 串 i pos n-m+1 S 串 T 串 T 串 i j jm i j i j i j in j T 串 一、简单算法 * int Index(SString S, SString T, int pos) { // 返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0。 // 其中,T非空,1≤pos≤StrLength(S)。 i = pos; j = 1; while (i = S[0] j = T[0]) { if (S[i] == T[j]) { ++i; ++j;
您可能关注的文档
最近下载
- 七上历史早背晚默小纸条.pdf VIP
- 《住院患者身体约束的护理》团体标准解读.pptx VIP
- 安装施工员工作职责内容(32篇).docx VIP
- 气凝胶隔热保温纳米涂料-气凝胶基础材料项目可行性研究报告.doc VIP
- 中心学校校园安全治本攻坚三年行动实施方案(2024-2026).pdf VIP
- 电动升降式高杆灯安装使用说明书.doc VIP
- GB50257-2014 电气装置安装工程 爆炸和火灾危险环境电气装置施工及验收规范.pdf VIP
- 【备战25年高考数学】解答题06 10类导数答题模板(原卷版) (2).docx VIP
- 《思想道德与法治》课件——专题6 遵守道德规范 锤炼道德品格.pptx VIP
- 【备战25年高考数学】解答题01 7类解三角形答题模板(解析版).docx VIP
文档评论(0)