数据结构串结构专题培训课件
合集下载
数据结构第四章串ppt

昌
顺序存储结构
大
链接存储结构
学
索引存储结构
科
技 学
不讲
院
6
4.2.1 串的顺序存储结构
南• 1.顺序存储的类型定义
昌• 顺序串的类型定义与顺序表的定义相似,可以用一个字符
大 型数组和一个整型变量表示,其中字符数组存储串,整型
学 变量表示串的长度。
科 技•
如串S=“Beijing”,字符串从S.ch[0]单元开始存放,用‘\0’
{ p=(linkstring *)malloc(LEN); p->data=t[k++];
y->next=p; y=p;}
y->next=NULL; return(s);
}/* L_STRASSIGN */
26
(2)求链串长度函数L_strlen(head):求带头结点 链串head的长度。
南 昌
图4-2
十分浪费。
8
4.2.1 串的顺序存储结构
• (2)紧凑存储。同样存
南 昌
储S="Hello boy",用紧
大 凑格式一个地址能存四
学 个字符,如图5-3所示。 科 技 紧凑存储的优点是空间
学 利用率高,缺点是对串
院 中字符处理的效率低。
存储地址 1000 1001 1002 1003
字长为4
}/* S_STRLEN */
22
(3)顺序串的比较函数S_strcmp(s1, s2):比较两个顺序串的 大小。若s1=s2,则函数返回0;若s1>s2,则函数返回正数; 若s1<s2,则函数返回负数。
/* 两个顺序串比较函数,函数返回值为0、正数或负数 */
数据结构部分PPT课件

1
数据结构
串中任意个连续字符组成的子序列称为该串的子串,包含子 串的串相应地称为主串。通常将子串在主串中首次出现时的 该子串的首字符对应的主串中的序号,定义为子串在主串中 的序号(或位置)。例如:a,b,c,d 四个字符串为
a=‘BEI’
, b=‘JING’
c=‘BEIJING’ , d=‘BEI JING’
StrCompare(S,T);
StrLength(S);
ClearString(&S);
Concat(&T,S1,S2);
Substring(&Sub,S,pos,len);
Index(S,T,pos);
Replace(&S,T,V);
StrInsert(&S,pos,T); StrDelete(&S,pos,len);
ADT String {
数据对象:D = {ai | ai∈CharacteSet,i=1,2,...n, n>=0} 数据关系: R1= {< ai-1., ai>| ai∈D, i=2,...n}。
基本操作:
StrAssign(&T,chars); StrCopy(&T,S);
StrEmpty (S);
它们的长度分别为 3,4,7,8;a和b都是c和d的子串。a在c和d 中的位置都是1,b在c中的位置是4,而b在d中的位置是5。
注意:单引号是为字符串区别于变量名而设,它不是字符串的 内容
称两个串是相等的 当且仅当这两个串每个字符对应相等
2
数据结构
二、串的抽象数据定义
串的抽象数据类型定义见书P71
第四章 串
4.1 串类型的定义
第4章 串 数据结构课件

saaaaabaaabsaaaaab设匹配成功发生在设匹配成功发生在sisi处则在处则在ii11趟不成功的匹配中共趟不成功的匹配中共比较了比较了ii11mm次第次第ii趟成功的匹配共比较了趟成功的匹配共比较了mm次所以总共比较了所以总共比较了iimm次因此平均比较的次数是次因此平均比较的次数是一般情况下一般情况下mnmn因此最坏情况下的时间复杂度是因此最坏情况下的时间复杂度是onmonm
):从主串 的第pos个字符起定 (10)子串定位 )子串定位StrIndex(s,t,pos):从主串 的第 个字符起定 ( , , ):从主串s的第 位串s中是否存在和串 值相等的子串,若存在,则返回子串t在主串 中是否存在和串t值相等的子串 在主串s中 位串 中是否存在和串 值相等的子串,若存在,则返回子串 在主串 中 第一次出现的位置,否则,返回函数值0。 第一次出现的位置,否则,返回函数值 。 例如, 例如, StrIndex(“Beijing”,“jin”,1)=4; ( , , ) ; StrIndex(“Beijing”,“jng”,2)=0 ( , , ) ):用 串置换s串中第 (11)置换运算 )置换运算StrReplace(s,pos,len,t):用t串置换 串中第 ( , , , ): 串置换 pos字符开始的连续的 个字符。 字符开始的连续的len个字符 字符开始的连续的 个字符。 例如,s=“Thatфisфaфbag!”,则 例如, ! StrReplace(s,3,2,“is”)=“Thisфisфaфbag!” (, , , )=“ )= ! 有时用另一种置换运算StrReplace(s,t,v)表示用 串置换所有在 ( , , )表示用v串置换所有在 有时用另一种置换运算 s串中出现的与 串相等的子串。 串中出现的与t串相等的子串 串中出现的与 串相等的子串。 例如, ++;” 例如,s=“if(j<n)ф j++;”,t=“j”,v=“i”,则 ( ) ++; , , StrReplace(s,t,v)=“if(i<n)ф i++;” (,, ) ++;” ( ) ++; 以上介绍的是有关串的一些基本运算, 以上介绍的是有关串的一些基本运算,利用它们可以处理关于串的 各种操作,在使用高级程序设计语言中的串类型时, 各种操作,在使用高级程序设计语言中的串类型时,对于串的基本运算 可以有不同的定义方法。 可以有不同的定义方法。
):从主串 的第pos个字符起定 (10)子串定位 )子串定位StrIndex(s,t,pos):从主串 的第 个字符起定 ( , , ):从主串s的第 位串s中是否存在和串 值相等的子串,若存在,则返回子串t在主串 中是否存在和串t值相等的子串 在主串s中 位串 中是否存在和串 值相等的子串,若存在,则返回子串 在主串 中 第一次出现的位置,否则,返回函数值0。 第一次出现的位置,否则,返回函数值 。 例如, 例如, StrIndex(“Beijing”,“jin”,1)=4; ( , , ) ; StrIndex(“Beijing”,“jng”,2)=0 ( , , ) ):用 串置换s串中第 (11)置换运算 )置换运算StrReplace(s,pos,len,t):用t串置换 串中第 ( , , , ): 串置换 pos字符开始的连续的 个字符。 字符开始的连续的len个字符 字符开始的连续的 个字符。 例如,s=“Thatфisфaфbag!”,则 例如, ! StrReplace(s,3,2,“is”)=“Thisфisфaфbag!” (, , , )=“ )= ! 有时用另一种置换运算StrReplace(s,t,v)表示用 串置换所有在 ( , , )表示用v串置换所有在 有时用另一种置换运算 s串中出现的与 串相等的子串。 串中出现的与t串相等的子串 串中出现的与 串相等的子串。 例如, ++;” 例如,s=“if(j<n)ф j++;”,t=“j”,v=“i”,则 ( ) ++; , , StrReplace(s,t,v)=“if(i<n)ф i++;” (,, ) ++;” ( ) ++; 以上介绍的是有关串的一些基本运算, 以上介绍的是有关串的一些基本运算,利用它们可以处理关于串的 各种操作,在使用高级程序设计语言中的串类型时, 各种操作,在使用高级程序设计语言中的串类型时,对于串的基本运算 可以有不同的定义方法。 可以有不同的定义方法。
数据结构课件_第七讲(串)

顺序存储实现:在顺序串中,每个字符依次 存放在一组连续的存储单元中。 串的顺序存储有两种方法:一种是每个存储 单元只存一个字符,称为非紧缩格式。第二 种,在每个存储单元中存放多个字符,称为 紧缩格式。
处理字符的速度高, 空间利用率低
节省存储空间,
处理字符速度低
顺序串的类型定义描述如下:
# define maxlen maxsize //maxsize为给定的最大长度 struct string { char ch[ maxlen ] ; //maxlen为数组中存储空间的最大数量 int len ; };
串的链式存储
链串与一般的链表类似,链串中的一个结点可以存储一 个或多个字符。 链串结点大小的选择将直接影响到串处理的效率。 存储密度=串值所占存储容量 / 实际分配存储容量 链串的类型定义如下: typedef struct Lnode { char data ; //存放字符 struct Lnode * next ; }*Linkstring ;
下课!
KMP算法
思想:设s为目标串,t为模式串,并设i指针和j指针 分别指示目标串和模式串中正待比较的字符,令i和j的初 值均为0。若有si=tj,则i和j分别增1;否则,i不变,j退回 到j=next[j]的位置(即模式串右滑),比较si和tj,若相等 则指针各增1,否则j再退回到下一个j=next[j]的位置(即 模式串继续右滑),再比较si和tj。依次类推,直到下列 两种情况之一:第一种情况是j退回到某个j=next[j]时有 si=tj,则指针各增1后继续匹配;另一种情况是j退回到j=1时,此时令指针各增1,即下一次比较si+1和t0。
操作四:strconcat(s,t)
分析:进行串连接时,由于存储空间有限,连接后的串 的长度不确定,所以存在三种情况: (1)两个串的长度之和小于最大存储量:将两个串进 行连接。 (2)两个串的长度之和大于最大存储值,但第一个串 的长度比最大存储值要小:将第二个串的部分进行连接 ,长出的部分采用截尾法处理。 (3)连接时第一个串就已将存储空间用完:不进行连 接。
处理字符的速度高, 空间利用率低
节省存储空间,
处理字符速度低
顺序串的类型定义描述如下:
# define maxlen maxsize //maxsize为给定的最大长度 struct string { char ch[ maxlen ] ; //maxlen为数组中存储空间的最大数量 int len ; };
串的链式存储
链串与一般的链表类似,链串中的一个结点可以存储一 个或多个字符。 链串结点大小的选择将直接影响到串处理的效率。 存储密度=串值所占存储容量 / 实际分配存储容量 链串的类型定义如下: typedef struct Lnode { char data ; //存放字符 struct Lnode * next ; }*Linkstring ;
下课!
KMP算法
思想:设s为目标串,t为模式串,并设i指针和j指针 分别指示目标串和模式串中正待比较的字符,令i和j的初 值均为0。若有si=tj,则i和j分别增1;否则,i不变,j退回 到j=next[j]的位置(即模式串右滑),比较si和tj,若相等 则指针各增1,否则j再退回到下一个j=next[j]的位置(即 模式串继续右滑),再比较si和tj。依次类推,直到下列 两种情况之一:第一种情况是j退回到某个j=next[j]时有 si=tj,则指针各增1后继续匹配;另一种情况是j退回到j=1时,此时令指针各增1,即下一次比较si+1和t0。
操作四:strconcat(s,t)
分析:进行串连接时,由于存储空间有限,连接后的串 的长度不确定,所以存在三种情况: (1)两个串的长度之和小于最大存储量:将两个串进 行连接。 (2)两个串的长度之和大于最大存储值,但第一个串 的长度比最大存储值要小:将第二个串的部分进行连接 ,长出的部分采用截尾法处理。 (3)连接时第一个串就已将存储空间用完:不进行连 接。
数据结构中的串课件

使用数组来存储串,数组的每个元素存储一个字符 。这种方法适用于较短的串,因为可以直接通过索 引来访问任意位置的字符。
2. 链式存储表示
使用链表来存储串,每个节点存储一个字符。这种 方法适用于较长的串,因为可以动态地分配内存空 间。
串的基本操作
01
02
03
1. 建立串
根据给定的字符串,创建 一个串对象。
2. 插入字符
在串的指定位置插入一个 字符。
3. 删除字符
删除串中指定位置的字符 。
串的基本操作
01
02
03
04
4. 查找字符
查找指定字符在串中的位置。
5. 比较串
比较两个串是否相等。
6. 复制串
将一个串复制到另一个串。
7. 修改串
修改串中指定位置的字符。
02
串的顺序存储结构
Chapter
顺序存储结构的定义
06
串的优化和改进建议
Chapter
使用哈希表优化查找速度
总结词
哈希表能显著提升查找效率
详细描述
哈希表是一种通过计算函数将关键字映射到桶中的数据结构,使得查找操作的 时间复杂度接近O(1)。使用哈希表可以显著提高串的查找速度,特别是在大规 模数据中。
使用动态规划优化插入和删除操作
总结词
动态规划可实现高效插入和删除操作
插入步骤
将插入位置后的字符全部向后移动 一个位置,然后将新字符插入到指 定位置。
时间复杂度
通常为O(n),其中n为字符串的长 度。
串的删除
删除位置
确定要删除的位置,可以是字符 串的开头、结尾或中间任意位置
。
删除步骤
将删除位置后的字符全部向前移 动一个位置,从而覆盖要删除的
2. 链式存储表示
使用链表来存储串,每个节点存储一个字符。这种 方法适用于较长的串,因为可以动态地分配内存空 间。
串的基本操作
01
02
03
1. 建立串
根据给定的字符串,创建 一个串对象。
2. 插入字符
在串的指定位置插入一个 字符。
3. 删除字符
删除串中指定位置的字符 。
串的基本操作
01
02
03
04
4. 查找字符
查找指定字符在串中的位置。
5. 比较串
比较两个串是否相等。
6. 复制串
将一个串复制到另一个串。
7. 修改串
修改串中指定位置的字符。
02
串的顺序存储结构
Chapter
顺序存储结构的定义
06
串的优化和改进建议
Chapter
使用哈希表优化查找速度
总结词
哈希表能显著提升查找效率
详细描述
哈希表是一种通过计算函数将关键字映射到桶中的数据结构,使得查找操作的 时间复杂度接近O(1)。使用哈希表可以显著提高串的查找速度,特别是在大规 模数据中。
使用动态规划优化插入和删除操作
总结词
动态规划可实现高效插入和删除操作
插入步骤
将插入位置后的字符全部向后移动 一个位置,然后将新字符插入到指 定位置。
时间复杂度
通常为O(n),其中n为字符串的长 度。
串的删除
删除位置
确定要删除的位置,可以是字符 串的开头、结尾或中间任意位置
。
删除步骤
将删除位置后的字符全部向前移 动一个位置,从而覆盖要删除的
数据结构学习培训课件

设有一个电话号码薄,它记录了N个人的名字和其 相应的电话号码,假定按如下形式安排:
(a1,b1)(a2,b2)…(an,bn) 其中(ai,bi)(i=1,2…n) 分别表示某人的名字和对应 的电话号码。要求设计一个算法,当给定任何一个人 的名字时,该算法能够打印出此人的电话号码,如果 该电话簿中根本就没有这个人,则该算法也能够报告 没有这个人的信息。
随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系
统程序和应用程序的规模很大,结构又相当复杂。因此,为了编
写出一个“好”的程序,必须分析待处理的对象的特征及各对象
之间存在的关系,这就是数据结构这门课所要研究的问题。
1.1 什么是数据结构 众所周知,计算机的程序是对信息进行处理。在大
多数情况下,这些信息并不是没有组织的,信息(数 据)之间往往具有重要的结构关系,这就是数据结构 的内容。什么是数据结构呢? 例子: 例1、电话号码查询系统
|an|*|xn|+|an-1|*|xn-1|+…+|a1|*|x1|+|a0|*|x0| ≦ |an|*|xn|+|an-1|*|xn|+…+|a1|*|xn|+|a0|*|xn|
=(|an|+|an-1|+…+|a1|+|a0|)|xn|=c|xn| 其中:n0=1, c= |an|+|an-1|+…+|a1|+|a0|, g(n)=xn
即时间复杂度为平方阶。
例5 for(i=0;i<=n-1;++i) for(j=0;j<=i;++j) a[i][j]=0;
i=0: 赋值1次
i=1: 赋值 2 次 i=2: 赋值3次 …………….. + i=n-1:赋值n次
(a1,b1)(a2,b2)…(an,bn) 其中(ai,bi)(i=1,2…n) 分别表示某人的名字和对应 的电话号码。要求设计一个算法,当给定任何一个人 的名字时,该算法能够打印出此人的电话号码,如果 该电话簿中根本就没有这个人,则该算法也能够报告 没有这个人的信息。
随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系
统程序和应用程序的规模很大,结构又相当复杂。因此,为了编
写出一个“好”的程序,必须分析待处理的对象的特征及各对象
之间存在的关系,这就是数据结构这门课所要研究的问题。
1.1 什么是数据结构 众所周知,计算机的程序是对信息进行处理。在大
多数情况下,这些信息并不是没有组织的,信息(数 据)之间往往具有重要的结构关系,这就是数据结构 的内容。什么是数据结构呢? 例子: 例1、电话号码查询系统
|an|*|xn|+|an-1|*|xn-1|+…+|a1|*|x1|+|a0|*|x0| ≦ |an|*|xn|+|an-1|*|xn|+…+|a1|*|xn|+|a0|*|xn|
=(|an|+|an-1|+…+|a1|+|a0|)|xn|=c|xn| 其中:n0=1, c= |an|+|an-1|+…+|a1|+|a0|, g(n)=xn
即时间复杂度为平方阶。
例5 for(i=0;i<=n-1;++i) for(j=0;j<=i;++j) a[i][j]=0;
i=0: 赋值1次
i=1: 赋值 2 次 i=2: 赋值3次 …………….. + i=n-1:赋值n次
《数据结构-串》课件

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

(5)求子串sub(s,start,len,t)。若 0≤start<length(s) 0≤len≤length(s)-start 则t中值为从串s中第start个字符起,长度为len的字符序列, 并且函数返回值为1;否则函数返回值为0。 例如,s=″data structure″, sub(s,5,5,t), 则 t=″struc″。 (6)子串定位index(s,t)函数。若在主串s中存在和t相等的 子串,则函数值为s中第一个这样的子串在主串s中的位置, 否则函数值为-1。注意,在此t不能是个空串。例如, s=″data structure″, t=″ru″, 则index(s,t)=7。 (7)替换replace(s,t,v)。操作结果是以串v替换串s中出现 的所有和非空子串t相同的不重叠子串。
4.2.3 堆存储结构
堆结构是一种动态存储结构。系统将一个容量很大的 连续空间作为多个串值可共用的空间,每当建立一个新串 时,若该串尚未赋值,它不占堆的存储空间;若要给该串 赋值,首先,从未分配的堆空间中分配给该串值要求的空 间,然后,将串值写入到分配的空间中;同样,当串的值 无意义或串值被赋空串时,原串值所占用的空间要还给堆。 所以,串的存储地址是动态分配的,一个串值的确定是通 过串在堆中的起始位置和串的长度实现的。为此,串名和 串值之间要建立一个对照表。例如图4.5,所示为对照表和 存放字符串的堆。
/* 若0≤start<length(s)并且0≤len≤length(s)-start,则 将串s中从第start个字符起,长度为len的字符序列复制到t中,函 数返回1;否则函数返回0 */
{ int n,i; if(start<0||start>=(n=length(s))) return(0); if(len<0||len+start>n) return(0); for(i=0;i<len,i++) t[i]=s[start+i]; s[m+n]= ’\0’; /* 子串串结束标志 */ return(1); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
子串位置: 子串的第一个字符的序号。 字符位置: 字符在串中的序号。
串相等: 串长度相等,且对应位置上字符相等。
0个或多个
练1:串是S由=’a1a2……a字n’符组成的序列,一般记为
。
练2:现有以下4个字符串: a =‘BEI’ b =‘JING’ c = ‘BEIJING’ d = ‘BEI JING’
• 串的块链存储表示
——链式方式存储
1.定长顺序存储特点:
用一组连续的存储单元来存放串,直接使用定长的字符数
组来定义,数组的上界预先给出,故称为静态存储分配。
例如: #define Maxstrlen 255 //用户可用的最大串长
typedef unsigned char SString[ Maxstrlen+1 ]; SString s; //s是一个可容纳255个字符的顺序串。
{ if (pos<1 || pos>S[0] || len<0 || len>S[0]-pos+1)
4
SubString(s, 8, 7)=
‘STUDENT’
SubString(t, 2, 1)=
‘O’
Index(s, ‘A’)=
3
Index(s, t)=
0 ( s中没有t!)
Replace(s, ‘STUDENT’,q)= ’I AM A WORKER’
再问:Concat(SubString(s,6,2), Concat(t,SubString(s,7,8))) =? ‘A GOOD STUDENT’
uncut = FALSE; } return uncut; } // Concat
2) 求子串函数SubString (&Sub, S, pos, len)
将串S中从第pos个字符开始长度为len的字符序列复 制到串Sub中(注:串Sub的预留长度与S一样)
Status SubString (SString &sub, SString S, int pos, int len )
串的抽象数据类型定义(参见教材P71)
ADT Sting{
Objects: D={ai | ai∈CharacterSet, i=1, 2,…,n, n≥0}
Relations: R1={<ai-1,ai> | ai-1,ai ∈D, i=2, …,n}
functions:
// 有13种之多
最 StrAssign(&T, chars) // 串赋值,生成值为chars的串T
串
……
Index(S, T, pos)
// 返回子串T在pos之后的位置
Replace(&S, T,V)
// 用子串V替换子串T
}ADT Sting
练习: 设 s =’I AM A STUDENT’, t =’GOOD’,
q=’WORKER’。求:
StrLength(s) =
14
StrLength(t) =
4.2 串的表示和实现
首先强调:串与线性表的运算有所不同,是以“串的整体”作 为操作对象,例如查找某子串,在主串某位置上插入一个子串 等。 串有三种机内表示方法:
顺序 存储
链式 存储
• 定长顺序存储表示
——用一组地址连续的存储单元存储串值的字 符序列。
• 堆分配存储表示
——用一组地址连续的存储单元存储串值的字 符序列,但存储空间是在程序执行过程中动态 分配而得。
小 StrCompare(S,T)
// 串比较,若S>T,返回值大于0…
操 StrLength(S)
// 求串长,即返回S的元素个数
作 子 集
Concat(&T, S1, S2) // 串连接,用T返回S1+S2的新串 SubString(&Sub, S, pos, len) // 求S中pos起长度为len的子
{ T[ 1..S1[0] ] = S1[ 1..S1[0] ]; T[ S1[0] +1 .. MAXSTRLEN ] = S2[ 1.. MAXSTRLEN- S1[0]]; T[0] = MAXSTRLEN; uncut = FALSE;
} else { T[ 0.. MAXSTRLEN ] = S1[ 0.. MAXSTRLEN ]; // 截取(仅取S1)
问:① 他们各自的长度? a =3,b =4,c = 7,d=8 ② a是哪个串的子串?在主串中的位置是多少?
a是c和d的子串,在c和d中的位置都是1
练3:空串和空白串有无区别? 答:有区别。空串(Null String)是指长度为零的串;
而空白串(Blank String),是指包含一个或多个 空白字符‘ ’(空格键)的字符串.
{ 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;
} else if ( S1[0] < MAXSTRSIZE ) // 截断
记为: s =‘ a1 , a2 , …….. , an’ (n≥0 )
ቤተ መጻሕፍቲ ባይዱ
串名 串值(用‘ ’ 括起来) 若干术语:
隐含结束符‘/0’ , 即ASCII码NULL
串长: 串中字符个数(n≥0). n=0 时称为空串 。
空白串: 由一个或多个空格符组成的串。
子串: 串s中任意个连续的字符序列叫s的子串; S叫主串。
注: • 一般用SString[0]来存放串长信息; •C语言约定在串尾加结束符 ‘ \0’,以利操作加速,但不计入串长; •若字符串超过Maxstrlen 则自动截断(因为静态数组存不 进去)。
实现方式:参见教材P73编程两例,两串连接和求子串
1) 串连接Concat(&T, S1,S2)
Status Concat( sstring &T, sstring S1, sstring S2) { if ( S1[0] +S2[0] <= MAXSTRLEN) // 未截断
数据结构串结 构
数据结构课程的内容
第4章 串(String)
1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式
4.1 串类型的定义
4.2 串的表示和实现 4.3 串的模式匹配算法
4.1 串类型的定义
串即字符串,是由零个或多个字符组成的有限序列,是数据 元素为单个字符的特殊线性表。