ImageVerifierCode 换一换
格式:PPT , 页数:38 ,大小:449.50KB ,
资源ID:3817423      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-3817423.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构-串.ppt)为本站会员(Facebook)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

数据结构-串.ppt

1、Chapter 4 String,教,学,内,容,1、 串的定义 2、 串的存储表示 3、 串的模式匹配算法,4.1 串的定义,串(字符串):是由 0 个或多个字符组成的 有限序列。 记为:s =“ a1 a2 a3 ai an ” ( n0 )。,字母、数字或其他字符,必须有!,作用:避免字符串与变量名或数的常量混淆。,基本概念,例:x = “123” x = 123,test =“test”,作用:避免字符串与变量名或数的常量混淆。,空串:不含任何字符的串,长度 = 0,用符号 表示。,空格串:仅由一个或多个空格组成的串。,子串:由串中任意个连续的字符组成的子序列。,主串:包含子串的串。,

2、位置:字符在序列中的序号。 子串在主串中的位置:子串的首字符在主串中的位置。,例:S=“JINAN” S1=“” S2=“NA” S=“JINAN”, S 的子串。,S4=“JAN”, 非 S 的子串 (非串 S 中的连续字符所组成)。,在 S 中的位置:2,在 S 中的位置:0,串相等的条件:当两个串的长度相等且各个对应 位置的字符都相等时才相等。,例:S=“JINAN” S1=“JI NAN” S S1,空串是任意串的子串,任意串是其自身的子串。,串的逻辑结构:和线性表极为相似。,串的基本操作:和线性表有很大差别。,区别:串的数据对象约定是字符集。,线性表的基本操作:以“单个元素”为操作对

3、象;,串的基本操作:以“串的整体”作为操作对象。,例:在串中查找某个子串; 在串的某个位置上插入一个子串; 删除一个子串等。,串的抽象数据类型的定义,ADT String 数据对象:D ai |aiCharacterSet, i = 1, 2, ., n, n0 数据关系:R1 | ai-1, ai D, i = 2, ., n 基本操作: StrAssign (&T, chars) 初始条件:chars 是字符串常量。 操作结果:构造一个串值为 chars 的串。 StrCopy (&T, S) 初始条件:串 S 存在。 操作结果:由串 S 复制得串 T。,DestroyString (&S

4、) 初始条件:串 S 存在。 操作结果:串 S 被销毁。 StrEmpty (S) 初始条件:串 S 存在。 操作结果:若 S 为空串,则返回 TRUE, 否则返回 FALSE。 StrCompare (S, T) 初始条件:串 S 和 T 存在。 操作结果:若 S T,则返回值 0; 若 S = T,则返回值 = 0;若 S T,则返回值 0。,“串值大小” 是按 “词典次序” 进行比较的,如: StrCompare(“data”, “stru”)0,StrLength (S) 初始条件:串 S 存在。 操作结果:返回 S 的元素个数,称为串的长度。 Concat (&T, S1, S2)

5、初始条件:串 S1 和 S2 存在。 操作结果:用 T 返回由 S1 和 S2 连接而成的新串。 SubString (&Sub, S, pos, len) 初始条件:串 S 存在,0posStrLength(S)-1 且 0lenStrLength(S) pos。 操作结果:用 Sub 返回串 S 的第 pos 个字符起长度 为 len 的子串。,Index (S, T, pos) 初始条件:串 S 和 T 存在,T 是非空串, 0posStrLength(S)-1。 操作结果:若主串 S 中存在和串 T 值相同的子串, 则返回它在主串 S 中第 pos 个字符之后 第一次出现的位置;否则函

6、数值为 0。 Replace (&S, T, V) 初始条件:串 S、T 和 V 存在,T 是非空串。 操作结果:用 V 替换主串 S 中出现的所有与 T 相等 的不重叠的子串。 ADT String,假设S=“abcacabcaca”, T=“abca” , V=“ab”, 则置换之后的 S=“abcabca”, 而不是 “abbcaca”。,例如:SubString( sub, commander , 3, 3),子串为“串”中的一个字符子序列,求得 sub = man ;,SubString( sub, commander , 0, 9),SubString( sub, commande

7、r , 8, 1),求得 sub = r ,求得 sub = commander ,SubString(sub, commander, 3, 7)sub = ?,SubString(sub, beijing, 6, 2) = ?sub = ?,SubString(student, 5, 0) = ,起始位置和子串长度之间存在约束关系,长度为 0 的子串为“合法”串,假设 S = abcaabcaaabc , T = bca ,Index(S, T, 0) = 1;,Index(S, T, 3) = 5;,Index(S, T, 8) = 0;,“子串在主串中的位置”意指子串 中的第一个字符在主

8、串中的位序。,因为串是特殊的线性表,故其存储结构 与线性表的存储结构类似,只不过组成串的 结点是单个字符。,4.2.1 定长顺序存储表示,定长顺序存储表示,也称为静态存储分配 的顺序串。即用一组地址连续的存储单元依次 存放串中的字符序列。,4.2 串的存储表示,#define MAXLEN 255 class String protected:unsigned char dataMAXLEN ;int len; /串的长度public: ;,串的实际长度可在这个预定义长度的范围内随意设定,超过预定义长度的串值则被舍去,称之为“截断”。,定长顺序存储表示时串的操作的实现,1、串连接 Concat

9、(&T, S1, S2),假设串 T 是由串 S1 连结串 S2 得到的,则只要进行 相应的“串值复制”操作即可,需要时进行“截断”。,串 T 值,S1.len+S2.len MAXLEN,S1.len MAXLEN,S1.len = MAXLEN,结果正确,结果 S2 被“截断”,结果 T=S1,String / Concat,定长顺序存储表示时串操作的缺点,1、需事先预定义串的最大长度,这在程序运行前是很难估计的。,2、由于定义了串的最大长度,使得串的某些操作受限(截尾),如串的连接、插入、置换等运算。,克服办法:不限定最大长度 动态分配串值的存储空间。,4.2.2 堆分配存储表示,堆存储

10、结构的特点:仍以一组空间足够大的地址连续的存储单元依次存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配的。,class String protected:char *strval;int slen; /串的长度public:String( const char *copy); ; (参考课本92页),这类串操作的实现算法为:1、为新生成的串分配一个存储空间;2、进行串值的复制。,String:String( ) / 操作结果:初始化串 slen = 0; / 串长度为0strval = NULL; / 空串 String:String( ) / 操作结果:销毁串,释放串所占用空间

11、delete strval; / 释放串strval ,String:String(const char *copy) length = strlen(copy); / 串长strVal = new charslen + 1;/ 分配存储空间 strcpy(strval, copy); / 复制串值 String:String(const String / 复制串值 ,String ,堆存储结构的优点:堆存储结构既有顺序存储结构的特点,处理(随机取子串)方便,操作中对串长又没有任何限制,更显灵活,因此在串处理的应用程序中常被采用。,堆分配存储表示为高级程序设计语言所采用。,4.2.3 串的块链

12、存储表示,串值也可用单链表存储,称为链串。 链串与单链表的差异只是它的结点数据域为单个字符。,S,优点:便于插入和删除 缺点:空间利用率低,为了提高空间利用率,可使每个结点存放多个字符 (这是顺序串和链串的综合 (折衷) ),称为块链结构。,S,存储密度 =,数据元素所占存储位,实际分配的存储位,实际应用时,可以根据问题所需来设置结点的 大小。例如:在编辑系统中,整个文本编辑区 可以看成是一个串,每一行是一个子串,构成 一个结点。即:同一行的串用定长结构(80个 字符),行和行之间用指针相连接。,4.3 串的模式匹配算法,设有主串s和子串t,子串t的定位就是要在主串s中找到一个与子串t相等的子

13、串。通常把主串s称为目标串,把子串t称为模式串,因此定位也称作模式匹配。模式匹配成功是指在目标串s中找到一个模式串t;不成功则指目标串s中不存在模式串t。,4.3.1 简单算法从目标串s=“s0s1sn-1“的第一个字符开始和模式串t=“t0t1tm-1“中的第一个字符比较,若相等,则继续逐个比较后续字符;否则从目标串s的第二个字符开始重新与模式串t的第一个字符进行比较。依次类推,若从模式串s的第i个字符开始,每个字符依次和目标串t中的对应字符相等,则匹配成功,该算法返回i;否则,匹配失败,函数返回-1。,例如,设目标串s=“cddcdc”,模式串t=“cdc”。s的长度为n(n=6),t的长

14、度为m(m=3)。用指针i指示目标串s的当前比较字符位置,用指针j指示模式串t的当前比较字符位置,匹配过程如下所示,int String:Index(const String ,算法1,int String:Index(const String /模式匹配不成功 ,算法2,4.3.2 KMP算法,KMP算法是D.E.Knuth、J.H.Morris和V.R.Pratt共同提出的,简称KMP算法。该算法较简单算法有较大改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。,例如: 设s=“abacabab“,t=“abab“,第一次匹配过程如下所示。,此时不必从i=1(i=i-j+

15、1=1),j=0重新开始第二次匹配。因t0t1,s1=t1,必有s1t0,又因t0 =t2,s2=t2,所以必有s2=t0。因此,第二次匹配可直接从i=3,j=1开始。,为此,定义nextj函数如下:max k|0kj,且“t0t1tk-1”=“tj-ktj-k+1tj-1” 当此集合非空时-1 当j=0时0 其他情况,nextj=,t=“abab”对应的next数组如下:,例: 设目标串s=“acabaabaabcacaabc”,模式串t=“abaabcac”。s的长度为17,t的长度为8。用指针i指示目标串s的当前比较字符位置,用指针j指示模式串t的当前比较字符位置。KMP模式匹配过程如下

16、所示。,int KMPIndex(String s, String t) int nextMaxSize,i=0,j=0,v;GetNext(t,next);while (i=t.slen) v=i-t.slen; /返回匹配模式串的首字符下标else v=-1; /返回不匹配标志return v; ,KMP算法,1、理解串的定长顺序存储、堆存储及链式存储各自的优缺点,能在应用中进行合理的选择。,2、掌握串的堆存储结构及其实现串的各种操作的基本方法。,教学要求,4、理解串匹配的KMP算法,熟悉NEXT函数的定义,学会手工计算给定模式串的NEXT函数值。,3、理解串匹配中简单算法的匹配过程及其具体实现。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报