数据结构 第4 章 字符串.ppt_第1页
数据结构 第4 章 字符串.ppt_第2页
数据结构 第4 章 字符串.ppt_第3页
数据结构 第4 章 字符串.ppt_第4页
数据结构 第4 章 字符串.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、字符串,1、串的概念; 2、串的存储结构; 3、串的运算。,教学内容,4.1 串类型的定义,串(也称字符串):是由 0 个或多个字符组成的有限序列。 通常记为:s =“ a1 a2 a3 ai an ” ( n0 )。,字母、数字或其他字符,必须有!,不属于串!,作用:避免与变量名或数的常量混淆。,例:x = “123” x = 123,test =“test”,基本概念,空串:不含任何字符的串,串长度 = 0,用符号 表示。,空格串:仅由一个或多个空格组成的串。,子串:由串中任意个连续的字符组成的子序列。,例:S=“JINAN” S1=“”、S2=“NA”、S=“JINAN”,主串:包含子串

2、的串。,位置:字符在序列中的序号。 子串在主串中的位置是子串的首字符在主串中的位置。, 子串。,S4=“JAN”, 非子串(非串 S 中的连续字符所组成)。,在 S 中的位置:3,在 S 中的位置:1,串相等的条件:当两个串的长度相等且各个对应位置的字符都 相等时才相等。,例: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 ( m = StrLength(T); / 求串长 i = pos; while ( i = n-m+1) SubString (sub, S, i, m); if (StrCompare(sub,T) != 0) +i ; else return i ; / 找到和 T 相等的

4、子串 / while / if return 0; / S 中不存在满足条件的子串 / Index,4.2 串的表示和实现,因为串是特殊的线性表,故其存储结构与线性表的存储结构 类似,只不过组成串的结点是单个字符。,4.2.1 定长顺序存储表示,定长顺序存储表示,也称为静态存储分配的顺序串。它是 用一组地址连续的存储单元来依次存放串中的字符序列。,“定长”、“静态”的意思可简单地理解为一个确定的存储空 间,它的长度是不变的。,可直接使用定长的字符数组来定义一个串,数组的上界 预先给出:,#define maxstrlen 255 / 可在 255 以内定义最大串长。 typedef unsig

5、nde char sstringmaxstrlen+1; / 0 号单元存放串的长度。,串的实际长度可在这个预定义长度的范围内随意设定, 超过预定义长度的串值则被舍去,称之为“截断”。,例:对于串 ch = “This is a dog.” 用上述两种方法分别表示为:,串长的两种表示方法:,一种是在串的存贮区首地址显式地记录串的长度。,另一种是隐式的,在串之后加入一个串的结束标志。,PASCAL 语言中的串类型就采用这种方法。,如 C 中使用 “0”,“0” 不计入串长。,定长顺序存储表示时串的操作的实现,1、串联接 Concat( /若非空则按串长分配存储区,否则 ch 为 NULL int

6、 length; /串长度 HString;,这类串操作的实现算法为: 1、为新生成的串分配一个存储空间; 2、进行串值的复制。,串插入操作 StrInsert( int length; HString;,X Y,X Y,Status Concat(HString / Concat,串联接 Concat 算法描述,Status SubString(HString / SubString,求子串 SubString 算法描述,status Strcopy(HString Strcopy,串复制 Strcopy 算法描述:,status StrAssign(HString StrAssign,串常

7、量赋值 StrAssign 算法描述:,int StrCompare(HString S, HString T) for (i=0; iS.length / StrCompare,串比较 StrCompare 算法描述:,status ClearString(HString ClearString,清空串 ClearString 算法描述:,堆存储结构的优点:堆存储结构既有顺序存储结构的 特点,处理(随机取子串)方便,操作中对串长又没有任 何限制,更显灵活,因此在串处理的应用程序中常被采用。,定长顺序存储表示和堆分配存储表示通常为高级程序 设计语言所采用。,4.2.3 串的块链存储表示,串值也

8、可用链表来存储,和线性表的链式存储类似。可用单 链表存放字符串,串的这种链式存储结构简称为链串。链串与单 链表的差异只是它的结点数据域为单个字符。,S,S,这种存储结构方便于串的插入和删除操作,但是空间利用率 不高,因为存放每一个字符要“搭配”一个指向下一字符的地址, 而地址所占空间是比较大的。,为了提高空间的利用率,可以使每个结点存放多个字符(事 实上这是顺序串和链串的综合 (折衷) ),称为块链结构。,S,S,存储密度 =,数据元素所占存储位,实际分配的存储位,实际应用时,可以根据问题所需来设置结点的大小。 例如:在编辑系统中,整个文本编辑区可以看成是一 个串,每一行是一个子串,构成一个结

9、点。即:同一行的 串用定长结构(80个字符),行和行之间用指针相联接。,结点结构用 C 语言定义如下: #define CHUNKSIZE 80 / 可由用户定义的块大小typedef struct Chunk / 结点结构 char chCUNKSIZE; struct Chunk *next; Chunk;,为了便于进行串的操作(联接),当以块链存储串值时, 除头指针外还可附设一个尾指针指示链表中的最后一个结点, 并给出当前串的长度。其结构用 C 语言定义如下: typedef struct / 串的链表结构 Chunk *head, *tail; / 串的头和尾指针 int curlen

10、; / 串的当前长度 LString;,4.3 串的模式匹配算法,模式匹配 :子串定位运算。 (串匹配) 就是在主串中找出子串出现的位置。,用函数 Index(S, T, pos) 实现。,在串匹配中,将主串 S 称为目标(串),子串 T 称为模式(串)。,如果在主串 S 中能够找到子串 T, 则称匹配成功,返回第一 个和子串 T 中第一个字符相等的字符在主串 S 中的序号;否则, 称匹配失败,返回 0。,当用模式依次从目标的头部往后移,移到的位置就 叫位移,每次移动后要看模式里的字符和目标中相应的 字符是否相等,若都相等,这次位移就叫有效位移(其 实就是从这个位置开始的匹配成功),否则叫无效

11、位移。,模式匹配是各种处理系统中最重要的操作之一,也 是一个比较复杂的串操作。模式匹配的算法不同,效率 将有很大差别。同一算法应用不同,效率亦有很大差别。,朴素的模式匹配算法,算法思想: 从主串 S 的第 pos 个字符起和模式 T 的第一个字符比较之, 若相同,则继续比较后续字符;否则从主串 S 的下一个字符起再 重新和模式 T 的字符比较之。,例:S = JINANSHI,T = NAN。,匹配,匹配,3,当采用定长顺序存储结构时,实现此操作的算法如下: int Index(SString S, SString T, int pos) / 返回子串 T 在主串 S 中第 pos 个字符之后

12、的位置。 / 若不存在,则函数值为 0。 / 其中,T 非空,1posStrLength(S)。 i = pos; j = 1; while (i T0) return i -T0; else return 0; / Index,4.1 有关概念 串(或字符串)、串名、串值、串的长度、空串、空格串、 子串、主串、位置、子串在主串中的位置。,总 结,4.2 串的存储表示 1.串的定长顺序存储表示 2. 串的变长顺序存储(堆分配存储)表示 3. 串的块链存储表示,4.3 串的常用运算 在串的基本操作中,通常已“串的整体”作为操作对象。 串的操作有很多,串赋值StrAssign , 串的比较 StrCompare , 求串长StrLength

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论