




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章串 主要内容 5 4 3串的模式匹配算法 2串的表示和实现 1串的抽象数据类型的定义 串的基本概念 1 串的定义 串是由0个或多个字符组成的有限序列 记作 S a1 a2 a3 an 其中 ai可以是字母 数字 或其它字符 2 几个概念主串 包含子串的串称为主串 子串 主串中任意个连续的字符组成的子序列 称为该串的子串 串的长度 串中所包含的字符的个数 子串在主串中的序号 子串在主串中第一次出现时 子串的第一个字符在主串中的序号 例如 设有两个串A BA Thisisastring B is 注意 1 空格也是字符 可以出现在字符串中 为清楚起见 用 表示空串 比较 与 2 空串是任意串的子串 任意串是其自身的子串 3 两串相等 当且仅当两个串的值相等 3 串常量与串变量串常量 是用 括起来的字符序列 串变量 对于S abcd 由于用S来称呼串 abcd 较方便 通常称S为串变量 例如 charobject datastructure char S S abc 串的抽象数据类型 ADTString 数据对象 D ai ai CharacterSet i 1 2 n n 0 数据关系 R ai 1 ai D i 2 n 基本操作 StrAssign T chars StrCopy T S DestroyString S StrEmpty S StrCompare S T StrLength S Concat T S1 S2 SubString Sub S pos len Index S T pos StrDelete S pos len ClearString S ADTString Replace S T V StrInsert S pos T StrAssign T chars 初始条件 chars是字符串常量 操作结果 把chars赋为T的值 StrCopy T S 初始条件 串S存在 操作结果 由串S复制得串T DestroyString S 初始条件 串S存在 操作结果 串S被销毁 StrEmpty S 初始条件 串S存在 操作结果 若S为空串 则返回TRUE 否则返回FALSE 表示空串 空串的长度为零 StrCompare S T 初始条件 串S和T存在 操作结果 若S T 则返回值 0 若S T 则返回值 0 若S T 则返回值 0 例如 StrCompare data state 0 StrLength S 初始条件 串S存在 操作结果 返回S的元素个数 称为串的长度 Concat T S1 S2 初始条件 串S1和S2存在 操作结果 用T返回由S1和S2联接而成的新串 例如 Concate T man kind 求得T mankind SubString Sub S pos len 初始条件 串S存在 1 pos StrLength S 且0 len StrLength S pos 1 操作结果 用Sub返回串S的第pos个字符起长度为len的子串 例如 SubString sub commander 4 3 求得sub man SubString sub commander 1 9 求得sub commander SubString sub commander 9 1 求得sub r SubString sub commander 4 7 sub SubString sub beijing 7 2 sub SubString student 5 0 起始位置和子串长度之间存在约束关系 长度为0的子串为 合法 串 Index S T pos 初始条件 串S和T存在 T是非空串 1 pos StrLength S 操作结果 若主串S中存在和串T值相同的子串 则返回它在主串S中第pos个字符之后第一次出现的位置 否则函数值为0 假设S abcaabcaaabc T bca Index S T 1 2 Index S T 3 6 Index S T 8 0 Replace S T V 初始条件 串S T和V均已存在 且T是非空串 操作结果 用V替换主串S中出现的所有与 模式串 T相等的不重叠的子串 例如 假设S abcaabcaaabca T bca 若V x 则经置换后得到S axaxaax 若V bc 则经置换后得到S abcabcaabc StrInsert S pos T 例如 S chater T rac 则执行StrInsert S 4 T 之后得到S character 初始条件 串S和T存在 1 pos StrLength S 1 操作结果 在串S的第pos个字符之前插入串T StrDelete S pos len 初始条件 串S存在1 pos StrLength S len 1 操作结果 从串S中删除第pos个字符起长度为len的子串 ClearString S 初始条件 串S存在 操作结果 将S清为空串 gets str 输入一个串 puts str 输出一个串 strcat str1 str2 串联接函数 strcpy str1 str2 k 串复制函数 strcmp str1 str2 串比较函数 strlen str 求串长函数 例如 C语言函数库中提供下列串处理函数 在上述抽象数据类型定义的13种操作中 串赋值StrAssign 串比较StrCompare 求串长StrLength 串联接Concat以及求子串SubString等五种操作构成串类型的最小操作子集 例如 可利用串比较 求串长和求子串等操作实现定位函数Index S T pos StrCompare SubString S i StrLength T T 0 S串 T串 T串 i pos n m 1 算法的基本思想为 intIndex StringS StringT intpos T为非空串 若主串S中第pos个字符之后存在与T相等的子串 则返回第一个这样的子串在S中的位置 否则返回0if 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 elsereturni while ifreturn0 S中不存在与T相等的子串 Index 又如串的置换函数 S串 T串 V串 V串 pos pos sub i news串 sub 串的逻辑结构和线性表极为相似 区别仅在于串的数据对象约束为字符集 串的基本操作和线性表有很大差别 在线性表的基本操作中 大多以 单个元素 作为操作对象 在串的基本操作中 通常以 串的整体 作为操作对象 一 串的定长顺序存储表示 二 串的堆分配存储表示 三 串的块链存储表示 串的表示和实现 串的定长顺序存储表示 defineMAXSTRLEN255 用户可在255以内定义最大串长typedefunsignedcharSstring MAXSTRLEN 1 0号单元存放串的长度 按这种串的表示方法实现的串的运算时 其基本操作为 字符序列的复制 串的实际长度可在这个预定义长度的范围内随意设定 超过预定义长度的串值则被舍去 称之为 截断 特点 StatusConcat SStringS1 SStringS2 SString Concat T 1 S1 0 S1 1 S1 0 T S1 0 1 MAXSTRLEN S2 1 MAXSTRLEN S1 0 T 0 MAXSTRLEN uncut FALSE 例如 串的联接算法中需分三种情况处理 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 if S1 0 S2 0 MAXSTRLEN 未截断 elseif S1 0 MAXSTRSIZE 截断 else 截断 仅取S1 T 0 MAXSTRLEN S1 0 MAXSTRLEN T 0 S1 0 MAXSTRLENuncut FALSE 串的堆分配存储表示 typedefstruct char ch 若是非空串 则按串长分配存储区 否则ch为NULLintlength 串长度 HString 通常 C语言中提供的串类型就是以这种存储方式实现的 系统利用函数malloc 和free 进行串值空间的动态管理 为每一个新产生的串分配一个存储区 称串值共享的存储空间为 堆 C语言中的串以一个空字符为结束符 串长是一个隐含值 这类串操作实现的算法为 先为新生成的串分配一个存储空间 然后进行串值的复制 StatusConcat HString Concat StatusSubString HString SubString Sub ch char malloc len sizeof char Sub ch 0 len 1 S pos 1 pos len 2 Sub length len 串的块链存储表示 也可用链表来存储串值 由于串的数据元素是一个字符 它只有8位二进制数 因此用链表存储时 通常一个结点中存放的不是一个字符 而是一个子串 存储密度 数据元素所占存储位 实际分配的存储位 defineCHUNKSIZE80 可由用户定义的块大小typedefstructChunk 结点结构charch CUNKSIZE structChunk next Chunk typedefstruct 串的链表结构Chunk head tail 串的头和尾指针intcurlen 串的当前长度 LString 例如 在编辑系统中 整个文本编辑区可以看成是一个串 每一行是一个子串 构成一个结点 即 同一行的串用定长结构 80个字符 行和行之间用指针相联接 实际应用时 可以根据问题所需来设置结点的大小 串的索引存储表示 用串变量的名字作为关键字组织索引表 该表中存储的是串名和串值之间的对应关系 若串值是以链接方式存储的 名字表中只要存入串名及其串值的链表的头指针 若串值是以顺序方式存储的 表中需要存入串名 串值的起始与终止位置 末地址 末地址的表示法 给出串长 在串值末尾设置结束符 设置尾指针等 1 带长度的名字表typedefstruct charname maxlen intlength char sta LNode 2 带末指针的名字表typedefstruct charname maxlen char sta end ENode 3 带特征位的名字表typedefstruct charname maxlen inttag union char sta 需给出结束符 0 charvalue 4 假设 sta占4个字节 uval TagNode 适合 大量串值只需一个指针域的空间就可存放 4 带位移量的名字表typedefstruct charname maxlen char sta end intoffsets offsete ONode 其中 offsets是子串首字符在主串中的序号 offsete是子串末字符在主串中的序号 1 主串的长度 初始条件 串S和T存在 T是非空串 1 pos StrLength S 操作结果 若主串S中存在和串T值相同的子串返回它在主串S中第pos个字符之后第一次出现的位置 否则函数值为0 首先 回忆一下串匹配 查找 的定义 INDEX S T pos 串的模式匹配算法 intIndex SStringS SStringT intpos 返回子串T在主串S中第pos个字符之后的位置 若不存在 则函数值为0 其中 T非空 1 pos StrLength S i pos j 1 while iT 0 returni T 0 elsereturn0 Index 简单算法 串的基本概念串的定义 串的基本概念 串的抽象数据类型串的基本运算串的存储与实现顺序存储表示 块链存储 堆分配存储表示 索引存储方式 本章重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字猜字谜课件
- 贵州省贵阳市普通高中2024-2025学年高一下学期期末监测化学试题(含答案)
- 2024-2025学年江苏省南京市六合区苏教版四年级下册期末考试数学试卷(含部分答案)
- 0-3岁婴幼儿保育与教育(1+x幼儿照护)知到智慧树答案
- 餐饮行业市场潜力分析
- 2024年秋新北师大版数学一年级上册教学课件 第四单元 10以内数加与减 第8课时 挖红薯
- 永州消防知识培训课件
- 跨境电子商务双语教程 习题和答案Chapter 4
- 水表检定基础知识培训课件
- 混凝土施工中表面光洁度控制方案
- 2025年医疗器械仓库管理培训试题及答案
- 2024年湖南省古丈县事业单位公开招聘工作人员考试题含答案
- 水费收缴使用管理办法
- 卵巢性索间质肿瘤课件
- 2025甘肃行政执法资格考试模拟卷及答案(题型)
- 2025-2026年秋季第一学期学校德育工作安排表:德润心田、智启未来、行塑栋梁
- 成人零基础英语教学课件
- 复杂性肛瘘护理
- 民警社区工作课件
- GB/T 8498-2025土方机械基本类型识别与术语
- 膝关节置换感染诊疗与管理
评论
0/150
提交评论