串类型的定义串的表示和实现串的模式匹配算法PPT资料42页

合集下载

串
上一页 下一页 返回
5.1 串的定义及基本操作
5.1.2 串的基本操作 假设S1=abcd,S2=efg。 ① Assign(S1,S2):串的赋值。 Assign(S1,S2)中S1为串变量名,S2是串变量名或字符系列,赋值操作
是将一个字符串S2赋给串变量S1。例如,Assign(S1,S2)或 Assign(S1,“efg”),则S1=“efg”。 ② Concat(S1,S2):串的连接。 Concat(S1,S2)就是表示将串S2的值紧接着放在串S1的值的末尾而组成 一个新串。例如,Concat(S1,S2)=“abcdefg”, Concat(S2,S1)=“efgabcd”。 ③ Length(S):求串长。 Length(S)表示求串S中字符的个数。例如,Length(“”)=0。
下一页 返回
5.2 串的存储结构
这时,要唯一确定S串,通常需要引进两个变量,一个是SH,用以存放 S串中第一个字符在向量V中的位置;另一SL,用以存放串的长度。针 对上例,SH=i,SL=7 在这种表示法中,访问串的子串是容易的。例如 ,要求得S串的子串S1=“GRAM”,只要访问V[i+3]到V[i+6]的字符 ,便可得到S1串。但在这种结构中进行插入和删除操作就较为困难。
本章介绍串的基本概念、存储结构及相关算法的实现等基本问题。
下一页 返回
5.1 串的定义及基本操作
5.1.1 串的定义
串(String)是n≥0个字符组成的有限序列,一般记为
S=“a1,a2,…,an”
式中,S为字符串串名;a1,a2,…,an为串值,ai(0≤i≤n)可以是字母和其他 符号(如>、=、*等);n为串长,即串值中字符的个数。串长n=0时,

串的模式匹配算法

串的模式匹配算法

串串(String)又叫做字符串,是一种特殊的线性表的结构,表中每一个元素仅由一个字符组成。

随着计算机的发展,串在文字编辑、词法扫描、符号处理以及定理证明等诸多领域已经得到了越来越广泛的应用。

第一节串的定义和表示1、串的逻辑结构定义串是由零个到任意多个字符组成的一个字符序列。

一般记为:S=’ a1a2a3……a n’(n>=0)其中S为串名,序列a1a2a3……a n为串值,n称为串的长度,我们将n=0的串称为空串(null string)。

串中任意一段连续的字符组成的子序列我们称之为该串的子串,字符在序列中的序号称为该字符在串中的位置。

在描述中,为了区分空串和空格串(s=‘’),我们一般采用来表示空串。

2、串的基本操作串一般包含以下几种基本的常用操作:1、length(S),求S串的长度。

2、delete(S,I,L),将S串从第I位开始删除L位。

3、insert(S,I,T),在S的第I位之前插入串T。

4、str(N,S),将数字N转化为串S。

5、val(S,N,K),将串S转化为数字N;K的作用是当S中含有不为数字的字符时,K记录下其位置,并且S没有被转化为N。

3、串的储存结构一般我们采用以下两种方式保存一个串:1、字符串类型,描述为:const n=串的最大长度type strtype=string[n]这里由于tp的限制,n只能为[1..255]。

在fp或者delphi中,我们还可以使用另外一种类型,描述为:const n=串的最大长度type strtype=qstring[n]这里的n就没有限制了,只要空间允许,开多大都可以。

2、数组来保存,描述为:const n=串的最大长度type strtype=records:array[1..n] of char;len:0..n;end;第二节模式匹配问题与一般的线性表不同,我们一般将串看成一个整体,它有一种特殊的操作——模式匹配。

数据结构 第四章 串

数据结构 第四章 串
第四章 串
4.1 4.2
串类型的定义 串的表示和实现
4.2.1 定长顺序存储表示 4.2.2 堆分配存储表示 4.2.3 串的块链存储表示
第四章 串
4.1 串类型的定义
一、串的基本概念 定义:字符串是 n ( 0 ) 个字符的有限序列
记作 S = “c1c2c3…cn”
其中:
S 是串名字 “c1c2c3…cn”是串值 ci 是串中字符 n 是串的长度
4.1 串类型的定义
一、串的基本概念
串中任意个连续字符组成的子序列称为该串的
子串,包含子串的串相应地称为主串。
子串在主串中首次出现时的该子串的首字符 对应的主串中的序号,定义为子串在主串中的
序号(或位置)
例如,设A和B分别为 A=“This is a string” B=“is”
4.1 串类型的定义
提取子串的算法示例
pos = 3, len = 3 infini ty
pos = 6, len = 4 infini ty
fin
len S[0]-pos+1
超出 len > S[0]-pos+1
合法参数条件: Pos>=0, Pos<=S[0], Len>=0
len <=S[0]-pos+1
求子串的过程即为复制字符序列的过程,将串S中的 第pos个字符开始长度为len的字符复制到串T中。
1、串的插入的动态实现过程 s.length+ t.length
SA
l o v el y
pos Tl o
t.length
vely
g irl!
t.length
1、串的插入的动态实现过程 s.length+ t.length

数据结构第4章串B教学ppt

数据结构第4章串B教学ppt
严蔚敏、吴伟民编著的经典教材,详细介绍了各 种数据结构及其基本操作,包括串的实现和应用。
《算法导论》
Thomas H. Cormen等编著的经典算法教材,深 入讲解了算法设计和分析的方法,包括串的模式 匹配等算法。
MOOC课程
中国大学MOOC、Coursera等在线教育平台上 提供了大量与数据结构和算法相关的课程,可以 系统地学习相关知识和技能。
压缩串处理技术
针对大规模文本数据,研究压缩串处理技术可以减少存储 空间占用,提高处理效率,是未来发展的重要方向之一。
串的并行处理技术
利用并行计算技术加速串的处理过程,提高处理效率,是 未来研究的热点之一。需要解决并行化算法设计、并行计 算框架选择等问题。
拓展学习资源推荐
1 2 3
《数据结构(C语言版)》
Sunday算法
Sunday算法是一种简单且高效的字符串匹配算法,其核心思 想是当发现不匹配的字符时,直接跳过主串中当前字符之前 的所有字符,将模式串与主串的下一个字符进行比较。
03
串的应用举例
文本编辑中的串操作
01
02
03
字符串匹配
在文本编辑中,经常需要 查找或替换特定的字符串, 这可以通过串的匹配操作 实现。
可以使用数组下标和字 符串截取函数`substr()` 实现串的截取,如`char ch = str[2];`或 `std:string sub = str.substr(2, 4);`。
Python语言实现串的基本操作
串的定义与初始化
在Python中,串使用引号(单引号、双 引号或三引号)进行定义和初始化,如`s = 'hello'`或`s = "hello"`。的比较

数据结构-第4章 串

数据结构-第4章 串
真子串是指不包含自身的所有子串。
4.1 串的类型定义
子串的序号:将子串在主串中首次出现时的该 子串的首字符对应在主串中的序号,称为子串 在主串中的序号(或位置)。 【例】 A=“abcdefbbcd”,B=“bcd”,B在A中的 序号为2。 特别地,空串是任意串的子串,任意串是其自 身的子串。
4.1.2 串的抽象数据类型定义
//查找ab子串
if (p->data==‘ a’ && p->next->data==‘b’)
{ p->data=‘x’; p->next->data=‘z’;
q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=‘y’;
q->next=p->next; p->next=q;
s: a a a a b c d
t: a ab bac acb bc c ✓ 匹配成功 算法的思路是从s的每一个字符开始依次与t的 字符进行匹配。
4.2.1 Brute-Force算法
int BFIndex(SqString s,SqString t)
{ int i=0, j=0,k;
while (i<s.length && j<t.length)
4.1 串的类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法
本章要求
理解: 1、串的基本概念、类型定义 2、串的存储表示和实现 3、串的KMP算法
掌握: 4、串的简单模式匹配算法(BF)
第4章 串的基本概念
串(或字符串):是由零个或多个字符组成 的有限序列。
串的逻辑表示: S=“a1a2…ai…an”,其中S为 串名,ai (1≤i≤n)代表单个字符,可以是字母、 数字或其它字符(包括空白符)。 串值:双引号括起来的字符序列。双引号不是 串的内容,只起标识作用。

串类型定义串表示和实现串模式匹配算法串操作应用举例(可编辑)

串类型定义串表示和实现串模式匹配算法串操作应用举例(可编辑)

串类型定义串表示和实现串模式匹配算法串操作应用举例串类型的定义串的表示和实现串的模式匹配算法串操作应用举例 4.1 串类型的定义基本概念 ADT串的定义 4.2 串的表示和实现堆分配存储结构表示时的(只含最小操作子集)基本操作的算法描述 4.3 串的模式匹配算法 4.4 串操作应用举例 else T[0..STRLEN] S1[0..STRLEN];// T[0] S1[0] STRLEN uncut FALSE; return uncut; // Concat 在串的顺序存储结构中,实现串操作的原操作为“字符序列的复制”,操作的时间复杂度基于字符序列的长度。

二、串的堆分配存储表示堆分配存储类似于线性表的顺序存储结构,仍以一组地址连续的存储单元存储串值的字符序列,但它们的存储空间是在程序执行过程中动态分配而得的。

在C语言中是由动态分配函数malloc 和free 来管理一个称之为“堆(heap)”的自由存储区的。

该存储结构类型描述如下: typedef struct char *ch ; // 若是非空串,则按串长分配存储区,//否则ch为NULL int length; // 串长度一个串值的确定是通过串在堆中的起始位置和串的长度实现的。

HString; 这类串操作实现的算法为: 先为新生成的串(若该串已存在,则先释放其所占空间)分配一个长度适当的存储空间,然后进行串值的复制。

这种存储结构表示时的串操作仍基于“字符序列的复制”进行的。

为此,串名与串值之间要建立一个对照表。

0 1 2 3 4 5 6 7 8 9 HString a,b ; 42012 b 4 2000 a 长度 ??length 基址 ??ch 串名 k o o B e r u t c u r t S a t a D ……16 2000+串插入算法 Status StrInsert Hstring &S, intpos, Hstring T //在串S的第pos个字符之前插入串T S.ch 0 1 pos-1 T.length if pos 1 || pos S.length+1 return ERROR; ifT.length //T非空,则重新分配空间,插入T if ! S.ch char * ralloc S.ch , S.length +T.length *sizeof char exitOVERELOW ; for i S.length-1;i pos - 1;--i //插入T而腾出位置 S.ch[i +T.length] S.ch[i] ; S.ch[pos - 1.. pos+T.length - 2] T.ch[0.. T.length - 1]; //插入TS.length + T.length; return OK ; Status StrAssignHString &T,char *chars //生成一个其值等于串常量chars的串T if T.ch free T.ch ; //若串T已存在,释放其所占空间 for i0, c chars ; c ; ++i, ++c ; if ! i T.ch null; T.length 0;else if ! T.ch char * malloc i*sizeof charexit OVERFLOW ; T.ch[0..i-1] chars[0..i-1]; T.lengthi; return OK ; int StrLength HString s return s.length; int StrCmpare HString S , HString T for i 0; i S.length && iT.length; ++i if S.ch[i]! T.ch[i] returnS.ch[i] -T.ch[i] ; return S.length-T.length;Status ClearString HString &S if S.ch free S.ch ; s.ch null;S.length 0; return OK; Status Concat HString &T,HString S1, HString S2 // 用T返回由S1和S2联接而成的新串 if T.ch free T.ch ; // 释放旧空间 if ! T.ch char * malloc S1.length+S2.length *sizeof char exit OVERFLOW ; T.ch[0..S1.length-1] S1.ch[0..S1.length-1];T.length S1.length + S2.length; T.ch[S1.length..T.length-1]S2.ch[0..S2.length-1]; return OK; // Concat Status SubStringHString &Sub, HString S, int pos, int len if pos 1 || posS.length || len 0 || len S.length-pos+1 return ERROR; if Sub.ch free Sub.ch ; // 释放旧空间 if ! len Sub.ch NULL; Sub.length 0; //空子串 else // 完整子串 Sub.ch char * malloc len*sizeof char ; Sub.ch[0..len-1] S[pos-1..pos+len-2];Sub.length len; return OK; // SubString 三、串的块链存储表示?? 可采用链表方式存储串值,每个结点可以存放一个字符,也可以存放多个字符(如图所示)。

第04章-串

第04章-串

1、typedef char * string; //c中旳串相 当于此类型定义
2、typedef struct
{ char *ch;
int length;
}hstring;
数据结构
4.2.3 串旳块链存储构造 链式存储构造类似线性链表,但需要考虑每个结 点是存储一种字符还是多种字符。一种字符旳, 插入、删除、求长度非常以便,但存储效率低。 多种字符旳,改善了效率,在处理大字符串时很 有效,可用特殊符号来填满未充分利用旳结点, 但插入、删除不以便。 附设了头尾指针,并给出了目前串旳长度旳串旳 链式存储构造称为块链存储构造。(参见P78类 型定义)
《 数据构造》
第四章
第四章 串
4.1 串类型旳定义 4.2 串旳表达和实现
4.2.1 定长顺序存储表达 4.2.2 堆分配存储表达 4.2.3 串旳块链存储表达 4.3 串旳模式匹配算法
数据结构
4.1 串类型旳定义
数据结构
一、串和基本概念
串(String)是零个或多种字符构成旳有限序列。一 般记作S=‘a1a2a3…an’,其中S 是串名,双引 号括起来旳字符序列是串值;ai(1≦i≦n)能够是字 母、数字或其他字符;串中所包括旳字符个数称 为该串旳长度。长度为零旳串称为空串,它不包 括任何字符。
串长度旳表达措施:
措施1:用下标为0旳元素存储串长度。
措施2:使用一种不会出目前串中旳特殊字符在串 值旳尾部来表达串旳结束。例如,C语言中以字符 ‵\0′表达串值旳终止。
4.2.2堆分配存储表达
数据结构
这种存储表达旳特点是,仍以一组地址连续旳存储 单元存储串值字符序列,但它们旳存储空间是在程 序执行过程中动态分配而得。所以也称为动态存储 分配旳顺序表。在C语言中利用函数malloc()、 free()来根据实际需要动态分配和释放字符数组空 间。这么定义旳顺序串类型也有两种形式。

第4章串概论

第4章串概论
2
4.1 串类型的定义
串即字符串,是由零个或多个字符组成的有限序列,是数据 元素为单个字符的特殊线性表。
记为: s =“a1 a2 …….. an ” (n≥0 )
串名 串值(用 “ ” 括起来)
隐含结束符‘\0’ ,即 ASCII码NUL
为何要单独讨论“串”类型?
1) 字符串操作比其他数据类型更复杂(如拷贝、连接操作) 2) 程序设计中,处理对象很多都是串类型。
③ 空串是哪个串的子串? a是不是自己的子串? “空串是任意串的子串;任意串S都是S本身的子串,除S本身 外,S的其他子串称为S的真子串。”
5
复习:C语言中常用的串运算
注:用C处理字符串时,要调用标准库函数 #include<string.h>
串比较:int strcmp(char *s1,char *s2); 求串长:int strlen(char *s); 串连接:char strcat(char *to,char *from) 子串T定位:char strchr(char *s,char *c);
{ if(pos<1 || pos>S[0] || len<0 || len>S[0]-pos+1) return ERROR;
//若pos和len参数越界,则告警
第4章 串(String)
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法
1
主要内容
逻辑结构 s = “a1a2 ……..an ”
定长顺序存储结构
串 存储结构 堆存储结构
块链存储结构 操作(或运算) 若干函数的实现
模式匹配算法
模式匹配即子串定位运算,即如何实现 Index(S,T,pos)函数

《数据结构-串》课件

《数据结构-串》课件
《数据结构-串》ppt 课件
xx年xx月xx日
• 串的基本概念 • 串的基本操作 • 串的模式匹配算法 • 串的应用 • 总结与展望
目录
01
串的基本概念
串的定义

由零个或多个字符组成的有限序列。
长度
串中字符的个数。
空串
长度为零的串。
串的表示
01
02
03
文本表示法
用单引号或双引号括起来 的字符序列。
文本编辑器中的串处理
在文本编辑器中,字符串处理功能通常包括字符串的查找、替换、分割、连接、大小写转 换等。这些功能可以帮助用户快速处理大量的文本数据,提高工作效率。
文本编辑器中的串处理
在文本编辑器中,字符串处理的应用场景非常广泛。例如,在编写小说或文章时,可以使 用查找和替换功能批量修改错别字或格式;在排版报纸或制作简历时,可以使用字符串分 割和大小写转换等功能快速整理文本内容。
详细描述
连接串操作需要将两个或多个已存在的字符串对象合并成一个新的字符串对象。在合并过程中,需要将前一个字 符串的结尾字符('0')替换为特殊字符,以便区分不同的字符串。然后,将后一个字符串的起始位置指向特殊字 符,实现两个字符串的连接。
比较串
总结词
比较串是比较两个字符串对象是否相等的过程。
详细描述
适用于模式字符串较短且主字 符串长度较小的情况。
KMP算法
总结词
高效的字符串匹配算法,能够避免不必要的比较
时间复杂度
O(n+m),其中n是主字符串长度,m是模式字符 串长度。
详细描述
KMP算法是一种改进的字符串匹配算法,它利用 已经匹配过的部分信息,通过一个称为“部分匹 配表”或“失败函数”的辅助数据结构,跳过一 些不必要的比较,从而提高匹配效率。

串的模式匹配PPT教案学习

串的模式匹配PPT教案学习

第3页/共38页
串的ADT定义—引用型操作
StrLength(S)
SubString( sub, commander, 4, 3) 求得sub= man SubString(sub,c om m a nde r,1,9)求得sub= c om m a nde r SubString( sub, commander, 9, 1)求得 sub = r; SubString(sub,student,5,0)求得sub= φ或 SubString(sub, beijing, 7, 2)求得sub = ?
} HString; //定长顺序存储结构下数组首元素存放串长 ,堆分配存储结构下数组各元素均存放有 效字符
第14页/共38页
Status StrAssign(HString &T, char *chars){ //chars为 常 量 char *p=chars,q; int i=0; if(T.ch) free(T.ch); while(*p++)i++; //求 chars的 长 度 T.length=i; if (!i) T.ch=NULL; else { T.ch=(char *)malloc(i*sizeof(char)); if (!(T.ch)) exit OVERFLOW; p=chars; q=T.ch; while(*p)*q++=*p++; } return OK;
第5页/共38页
2、串的最小操作子集
除串清空和销毁外StrAssign、Strcopy、Concat 、 StrLength、 SubString、StrCompare六种操 作构成一个最小操作子集。其他串操作可在这个 最小操作子集上实现,如Index(S,T,pos)

串类型的定义串的表示和实现串的模式匹配算法

串类型的定义串的表示和实现串的模式匹配算法
第5页/共41页
4.1 串类型的定义
串的ADT定义
ADT String { 数据对象:D={ ai |ai∈CharacterSet,i=1,2,...,n, n≥0 } 数据关系: R1={ < ai-1, ai > | ai-1, ai ∈D, i=2,...,n }
基本操作: 见下页
} ADT String
第17页/共41页
4.2.2 堆分配存储表示
堆分配存储表示的求子串算法
Status SubString(HString &Sub, HString S,
int pos, int len) {
if (pos < 1 || pos > S.length
|| len < 0 || len > S.length-pos+1)
Chunk *head, *tail; // 串的头和尾指针
int curlen;
// 串的当前长度
} LString;
第22页/共41页
4.3 串的模式匹配算法
4.3.1 模式匹配简单算法 4.3.2 模式匹配KMP算法
第23页/共41页
4.3 串的模式匹配算法 串匹配(查找)的定义
INDEX (S, T, pos)
#define MAXSTRLEN 255 // 用户可在255以内定义最大串长
typedef unsigned char Sstring[MAXSTRLEN+1]; // 0号单元存放串的长度
Sstring S;
第10页/共41页
4.2.1 定长顺序存储表示 串的连接算法
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断,

串的抽象数据类型的定义课件

串的抽象数据类型的定义课件

字符串的替换
总结词
字符串的替换是指在一个字符串中查找并替换另一个字符串的操作。
详细描述
字符串的替换可以通过多种方式实现,例如在Python中,可以使用replace()方法来替换子串。该方 法将主串中所有出现的子串替换为指定的新字符串,并返回新的字符串。例如,将字符串 "HelloWorld"中的"World"替换为"Universe",可以得到新的字符串"HelloUniverse"。
子串的查找
总结词
子串的查找是指在一个字符串中查找另一个字符串是否存在,以及其出现的位置的操作。
详细描述
子串的查找可以通过多种方式实现,例如在Python中,可以使用find()方法来查找子串。该方法返回子串在主串 中第一次出现的位置的索引,如果找不到子串,则返回-1。例如,在字符串"HelloWorld"中查找子串"World", 可以得到其位置索引为6。
要点二
详细描述
解决字符串排序问题可以使用插入排序、选择排序或快速 排序等算法。插入排序通过将字符串拆分为若干子串,对 子串进行排序后拼接得到有序字符串。选择排序则是每次 从待排序的字符串中选择最小(或最大)的字符,将其放 到已排序部分的末尾。快速排序则是利用分治法,将字符 串拆分为更小的子串进行排序。
串的抽象数据类型的定义课件
目录
• 串的定义与特性 • 串的抽象数据类型 • 串的基本操作 • 串的存储结构 • 串的模式匹配算法 • 串的常见问题与解决方案
01
串的定义与特性
串的基本概念
串是由零个或多个字符组成的有限序列。
串中字符的顺序很重要,不同的顺序表示不同的 串。 空串是所有串的子串,即长度为0的串。

第4章演示

第4章演示

4.3串的模式匹配算法
4. Index(S,T,pos)的算法实现 int Index(SString S, SString T, int pos) { int i,j; i=pos; j=1; while( (i<=S[0])&&(j<=T[0]) ) if( S[i]==T[j] ) { i++;j++;} else { i=i-j+2; j=1;} if(j>T[0]) return (i-j+1); else return 0; }
2. 朴素模式匹配(BF算法) 例:主串S="ababcabcacbab",模式T="abcac"
i i i i i
第 3 趟
a b a b c a b c a c b a b a b c a c
j j j j j
i=7,j=5失败 , 失败 i回溯到 ,j回溯到 回溯到4, 回溯到 回溯到1 回溯到
4.3串的模式匹配算法
2. 朴素模式匹配(BF算法) 例:主串S="ababcabcacbab",模式T="abcac"
i i i
第 1 趟
j
a b a b c a b c a c b a b a b c a c
j j
i=3,j=3失败; , 失败 失败; i回溯到 ,j回溯到 回溯到2, 回溯到 回溯到1 回溯到
第4章 串
4.1串类型的定义 4.2串的表示和实现
4.3串的模式匹配算法
4.1串类型的定义
串(又称字符串)是一种特殊的线性表,它的每个 结点仅由一个字符组成。 一、串的定义 串(String),又称字符串,是由零个或多个字符 组成的有限序列。一般记为 S=‘a1a2……an’ 其中: ①S是串名; ②单引号括起的字符序列是串值。 ③ai(1≤i≤n)可以是字母、数字或其它字符; ④串中所包含的字符个数称为该串的长度。

DS04_串01_串类型的定义、表示和实现

DS04_串01_串类型的定义、表示和实现
第4章 串
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例
学习要点
串的七种基本操作的定义, (1)熟悉串的七种基本操作的定义,并能利用这些基本 )熟悉串的七种基本操作的定义 操作来实现串的其它各种操作的方法. 操作来实现串的其它各种操作的方法. 在串的定长顺序 (2)熟练掌握在串的定长顺序存储结构上实现串的各种 )熟练掌握在串的定长顺序存储结构上实现串的各种 操作的方法. 操作的方法. 串的堆 (3)掌握串的堆存储结构以及在其上实现串操作的基本 )掌握串的 方法. 方法. 串匹配的KMP算法,熟悉 算法, 函数的定义, (4)理解串匹配的 )理解串匹配的 算法 熟悉next函数的定义,学 函数的定义 会手工计算给定模式串的next函数值和改进的 计算给定模式串的 函数值和改进的 函数值. 会手工计算给定模式串的 函数值和改进的next函数值. 函数值 (5)了解串操作的应用方法和特点. )了解串操作的应用方法和特点.
4.1 串类型的定义
1.串的概念 1.串的概念 字符串,由0个或多个字符/符号的顺序排列所组成的复 字符串 合数据结构,简称"串"(string) 串的长度:一个字符串所包含的字符个数 空串:长度为零的串,它不包含任何字符内容 特殊的线性表,即元素为字符的线性表 特殊的线性表 n ( ≥ 0 ) 个字符的有限序列,一般记作 S : 'c0c1c2…cn-1' 其中,S是串名字 c0c1c2…cn-1 : 串值 ci是串中的字符 n是串的长度 (即字符个数),长度为0则为空串
Replace(s, 'STUDENT',q) = 'I AM A WORKER' 考虑: 考虑:Concat(SubString(s,6,2), Concat(t,SubString(s,7,8))) =? A GOOD STUDENT

数据结构课件(串)

数据结构课件(串)
第四章 串
4.1 串的 定义
4.2 串的 表示和 实现
4.3 串的 模式匹 配算法
4.4 串应 用
数据结构
第四章 串
2019年12月22日星期日
1
第四章 串
第四章 串
4.1 串的 定义
4.2 串的 表示和 实现
4.3 串的 模式匹 配算法
4.4 串应 用
串的逻辑结构和线性表极为相似,区别仅在于串的 数据对象约束为字符集。
5
4.1 串的定义
第四章 串
4.1 串的 定义
4.2 串的 表示和 实现
4.3 串的 模式匹 配算法
4.4 串应 用
串的抽象数据类型的定义
StrCompare (S, T) 初始条件:串S和T存在。 操作结果:若S >T,则返回值 >0;若S =T,
则返回值 =0;若S <T,则返回值<0。
StrLength (S) 初始条件:串S存在。 操作结果:返回S的元素个数,称为串的长度。
然而,串的基本操作和线性表有很大差别。在线性 表的基本操作中,大多以“单个元素”作为操作对象,
如:在线性表中查找某个元素、求取某个元素、在 某个位置上插入一个元素和删除一个元素等;
而在串的基本操作中,通常以“串的整体”作为操 作对象,
如:在串中查找某个子串、求取一个子串、在串的 某个位置上插入一个子串以及删除一个子串等。
4.3 串的 模式匹 配算法
4.4 串应 用
串的逻辑结构和线性表的区别:
1. 串的数据对象约束为字符集。 2. 线性表的基本操作大多以“单个元素”为操作对 象,而串的基本操作通常以“串的整体”作为操作对象。
对于串可以定义以下运算:

第03章 串(Java版) 图文

第03章  串(Java版) 图文

int begin=3, end=6;
s.substring(0, begin)+s.substring(end); 串中从begin到end-1处的子串
//删除s
0 … begin-1begin … end-1 end … length-1 sab c x y z d e f
+ s4 a b c d e f
s.substring(begin, end) c 结果串
复制 de
《数据结构(Java版)(第4版)》第3章 13
(3) 连接串
public MyString concat(MyString s)
0 this.value[] a
1 … length-1 bcd
0 s.value[] x
… length-1 yz
《数据结构(Java版)(第4版)》第3章 5
3.2.1 串的存储结构
1. 串的顺序存储结构
0 1 … length-1 sab c d
0 1 2 … n-1 n sab c d e f
… length-1
(a)存储常量串,数组容量length = 串长度n
(b)存储变量串,数组容量length > 串长度n
String temp = ""; for (int i=0; i<str.length(); i++)
temp = str.substring(i, i+1) + temp; //求子串、串连接,每次运算复制
return temp; } //第5版习题解答
《数据结构(Java版)(第4版)》第3章 18
② 逆转算法使用字符数组, 二次遍历
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
则返回TRUE,否则FALSE。
if (S1[0]+S2[0] <= MAXSTRLEN) { // 未截断
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; }
T[0..MAXSTRLEN] = S1[0..MAXSTRLEN];
// T[0] == S1[0] == MAXSTRLEN
uncut = FALSE;
}
return uncut; } // Concat
13
4.2.1 定长顺序存储表示 子串的删除算法
第4章 串
Status StrDelete (SSstring &S, int pos, int len) { if (pos<1 || pos>S[0]||len<=0) return error; if (pos+len-1>=S[0]) S[0]=pos-1; else{ for(i=pos+len;i<=S[0];i++) {S[i-len]=S[i]; } S[0]=S[0]-len; } return OK;
#define MAXSTRLEN 255 // 用户可在255以内定义最大串长
typedef unsigned char Sstring[MAXSTRLEN+1]; // 0号单元存放串的长度
Sstring S;
10
பைடு நூலகம்
4.2.1 定长顺序存储表示 串的连接算法
第4章 串
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断,
5
4.1 串类型的定义 串的ADT定义
第4章 串
ADT String { 数据对象:D={ ai |ai∈CharacterSet,i=1,2,...,n, n≥0 } 数据关系: R1={ < ai-1, ai > | ai-1, ai ∈D, i=2,...,n }
基本操作: 见下页
} ADT String
6
4.1 串类型的定义 基本操作:
第4章 串
StrAssign (&T, chars) //根据串常量chars生成串T
DestroyString(&S) //销毁串S
StrCopy (&T, S)
//把串S中内容拷贝到T串
StrLength(S)
//求串长
StrCompare (S, T) //比较串S和T Concat (&T, S1, S2) //连接串
StrInsert (&S, pos, T)
//插入子串
StrDelete (&S, pos, len) //删除子串
8
第4章 串
4.2 串的表示和实现
4.2.1、定长顺序存储表示 4.2.2、堆分配存储表示 4.2.3、串的块链存储表示
9
4.2.1 定长顺序存储表示 串的顺序存储C语言实现
第4章 串
的值。
串的有关术语
(1) 串的长度:串中字符的数目n。 (2) 空串(Null string):长度为零的串。 (3) 子串:串中任意个连续的字符组成的子序列。
3
4.1 串类型的定义
第4章 串
串的有关术语
(4) 主串 包含子串的串相应地称为主串。
(5) 串相等 只有当两个串的长度相等,并且各个对应位置的
StrEmpty (S)
//判断串是否空
7
4.1 串类型的定义 基本操作:
第4章 串
SubString (&Sub, S, pos, len) //求子串
ClearString (&S)
//清空串S
Index (S, T, pos)
//子串定位
Replace (&S, T, V)
//把串S中符合T的子串替换
}
14
第4章 串
4.2 串的表示和实现
4.2.1、定长顺序存储表示 4.2.2、堆分配存储表示 4.2.3、串的块链存储表示
15
4.2.2 堆分配存储表示 堆分配存储表示的C语言实现
第4章 串
typedef struct {
………………. return uncut; } // Concat
11
4.2.1 定长顺序存储表示 串的连接算法
第4章 串
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断,
则返回TRUE,否则FALSE。 ……………….
12
4.2.1 定长顺序存储表示 串的连接算法
第4章 串
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断,
则返回TRUE,否则FALSE。
………………. else { // 截断(仅取S1)
第4章 串
本章重点难点
重点: (1)ADT串的设计、实现方法和基本操作;
(2)串的简单模式匹配算法,KMP算法。
难点:串的模式匹配算法中的KMP算法。
1
第4章 串
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法
2
4.1 串类型的定义
第4章 串
串(String)的定义 串是由零个或多个字符组成的有限序列。 记为:s=”a1a2…an” (n≥0) 其中,s是串的名,用双引号括起来的字符序列是串
字符都相等,称两串相等。 (6) 空格串(空白串)(blank string) 由一个或多个空格组成的串。要和“空串”区别,
空格串有长度就是空格的个数。
4
4.1 串类型的定义 串与一般线性表的区别
第4章 串
(1) 串数据对象约束为字符集。
(2) 基本操作的对象不同,线性表以“单个元 素”为操作对象;串以“串的整体”为操作对象, 操作的一般都是子串。
else if (S1[0] <MAXSTRSIZE) { // 截断
T[1..S1[0]] = S1[1..S1[0]];
T[S1[0]+1…MAXSTRLEN] = S2[1…MAXSTRLEN-S1[0]];
T[0] = MAXSTRLEN; uncut = FALSE; }
return uncut; } // Concat
相关文档
最新文档