数据结构课件 第4章 串
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重点和难点
本章非整个课程的重点, 本章非整个课程的重点,鉴于串已是多数高级语言中已经实现的 数据类型,因此本章重点仅在于了解串类型定义中各基本操作的 数据类型,因此本章重点仅在于了解串类型定义中各基本操作的 定义以及串的实现方法, 定义以及串的实现方法,并学会利用这些基本操作来实现串的其 它操作. 它操作.
Data Structure
2010-7-8
Page 10
SubString (&Sub, S, pos, len) 初始条件: 存在,1≤pos≤StrLength(S)且 初始条件:串S存在,1≤pos≤StrLength(S)且 0≤len≤StrLength(S)-pos+1. 0≤len≤StrLength(S)-pos+1. 操作结果: 返回串S 个字符起长度为len 操作结果:用 Sub 返回串S的第 pos 个字符起长度为len 的子串. 的子串. Index (S, T, pos) 初始条件: 存在, 是非空串, 初始条件:串S和T存在,T 是非空串, 1≤pos≤StrLength(S). 1≤pos≤StrLength(S). 操作结果:若主串S中存在和串T值相同的子串, 操作结果:若主串S中存在和串T值相同的子串,则返回它 在主串S中第pos个字符之后第一次出现的位置; pos个字符之后第一次出现的位置 在主串S中第pos个字符之后第一次出现的位置; 否则函数值为0 否则函数值为0.
0
1
2
3
4
5
6
7……
Max-1 -
9 a
Data Structure
b
c d
e f
2010-7-8
g
空 闲
Page 16
算法4.1 算法4.1 定位函数
基本思想:从主串S中取" 基本思想:从主串S中取"第i个字符起,长度和串T相等的子串"和 个字符起,长度和串T相等的子串" 串 比较,若相等,则求得函数值为i 否则i值增1 T比较,若相等,则求得函数值为i,否则i值增1直至找 到相等的子串或者不存在和T相等的子串为止. 到相等的子串或者不存在和T相等的子串为止. int Index (String S, String T, int pos){
Data Structure
2010-7-8
Page 13
如何表示串的长度? 如何表示串的长度? 方案1:用一个变量来表示串的实际长度. 方案 :用一个变量来表示串的实际长度.
0
1
2
3
4
5
6 … … Max-1 -
a
Data Structure
ቤተ መጻሕፍቲ ባይዱ
b
c d
e f
g
空 闲
9
Page 14
2010-7-8
Data Structure 2010-7-8 Page 4
串值必须用一 对单引号括起 来
空串与空格 串的区别? 串的区别?
a='BEI a= BEI' BEI b='JING JING' b= JING c='BEIJING BEIJING' c= BEIJING d='BEI JING' d= BEI JING 长度分别为3,4,7,8; 长度分别为3 分别为 a和b都是c和d的子串; 都是c 的子串; a在c和d中的位置都是1; 中的位置都是1 都是 b在c和d中的位置是4和5; 中的位置是 a,b,c,d彼此不相等. 彼此不相等.
Data Structure
2010-7-8
Page 9
StrLength (S) 初始条件: 存在. 初始条件:串 S 存在. 操作结果: 序列中的字符个数,即串的长度. 操作结果:返回串 S 序列中的字符个数,即串的长度. ClearString (&S) 初始条件: 存在. 初始条件:串 S 存在. 操作结果: 清为空串. 操作结果:将 S 清为空串. Concat (&T, S1, S2) 初始条件: 存在. 初始条件:串 S1 和 S2 存在. 操作结果: 联接而成的新串. 操作结果:用 T 返回由 S1 和 S2 联接而成的新串.
a
Data Structure
b
c d
e f
g \0
2010-7-8
如何表示串的长度? 如何表示串的长度? 方案1:用一个变量来表示串的实际长度. 方案 :用一个变量来表示串的实际长度. 方案2: 方案 :在串尾存储一个不会在串中出现的特殊字符 作为串的终结符,表示串的结尾. 作为串的终结符,表示串的结尾. 方案3: 用数组的0号单元存放串的长度 号单元存放串的长度, 1号单 方案 3 : 用数组的 0 号单元存放串的长度 , 从 1 号单 元开始存放串值. 元开始存放串值.
Data Structure
2010-7-8
Page 6
串与线性表区别 串的数据对象约束为字符集. 串的数据对象约束为字符集. 字符集 串的基本操作与线性表有很大差别 串的基本操作与线性表有很大差别 基本操作
线性表的基本操作中,大多以"单个元素"作为操作对象, 线性表的基本操作中,大多以"单个元素"作为操作对象,如 查找某个元素,在某个位置上插入一个元素和删除一个元素. 查找某个元素,在某个位置上插入一个元素和删除一个元素. 串的基本操作中,通常以"串的整体"作为操作对象. 串的基本操作中,通常以"串的整体"作为操作对象.如在串 中查找某个子串, 中查找某个子串,在串的某个位置上插入一个子串以及删除一 个子串. 个子串.
Data Structure 2010-7-8 Page 8
DestroyString (&S) 初始条件: 存在. 初始条件:串 S 存在. 操作结果: 被销毁. 操作结果:串 S 被销毁. StrEmpty (S) 初始条件: 存在. 初始条件:串 S 存在. 操作结果: 为空串, TRUE, FALSE. 操作结果:若 S 为空串,则返回 TRUE,否则返回 FALSE. StrCompare (S, T) 初始条件: 存在. 初始条件:串 S 和 T 存在. 操作结果: S>T,则返回值>0 >0; S=T,则返回值=0 =0; 操作结果:若S>T,则返回值>0;若S=T,则返回值=0;若 S<T,则返回值<0 <0. S<T,则返回值<0.
由于我们现今使用的计算机的硬件结构主要是面向数值计 算的需要,基本上没有提供对串进行操作的指令,因此需 算的需要,基本上没有提供对串进行操作的指令, 用软件来实现串数据类型. 要用软件来实现串数据类型.
Data Structure
2010-7-8
Page 3
4.1 串类型的定义 串
由零个或多个字符组成的有限序列. 零个或多个字符组成的有限序列. S='a 记作 S= a1a2…an' (n≥0) a 串名: 串名:S; 串值:用单引号括起来的字符序列. 串值:用单引号括起来的字符序列. 长度:串中字符的数目. 长度:串中字符的数目. 空串:含零个字符的串, 表示. 空串:含零个字符的串,表示. 空格串:由一个或多个空格组成的串. 空格串:由一个或多个空格组成的串. 子串:串中任意个连续的字符组成的子序列. 子串:串中任意个连续的字符组成的子序列. 字符在串的位置:字符在序列中的序号. 字符在串的位置:字符在序列中的序号. 子串在串的位置:子串的第一个字符在串中的位置. 子串在串的位置:子串的第一个字符在串中的位置. 相等:当且仅当两个串的值相等. 相等:当且仅当两个串的值相等.
Data Structure 2010-7-8 Page 12
4.2 串的表示和实现
定长顺序存储表示
用一组地址连续的存储单元存储串值的字符序列. 用一组地址连续的存储单元存储串值的字符序列. 地址连续的存储单元存储串值的字符序列 可用定长数组描述. 可用定长数组描述. 255; #define MAXSTRLEN 255; +1]; typedef unsigned char SString[MAXSTRLEN +1]; (1)非压缩形式:一个数组单元存储一个字符——浪 非压缩形式:一个数组单元存储一个字符 浪 费空间. 费空间. (2)压缩形式:一个数组单元存储多个字符——算法 压缩形式: 复杂.
T为非空串 若主串S 为非空串. 个字符之后存在与T相等的子串, // T为非空串.若主串S中第 pos 个字符之后存在与T相等的子串, // 则返回第一个这样的子串在S中的位置,否则返回0. 则返回第一个这样的子串在S中的位置,否则返回0
Data Structure 2010-7-8 Page 11
Replace (&S, T, V) 初始条件: 存在, 是非空串. 初始条件:串 S,T 和 V 存在,T 是非空串. 操作结果: 替换主串S中出现的所有与T 操作结果:用V替换主串S中出现的所有与T相等的不重叠的 子串. 子串. StrInsert (&S, pos, T) 初始条件: 存在,1≤pos≤StrLength(S)+ 初始条件:串 S 和 T 存在,1≤pos≤StrLength(S)+1. 操作结果: 操作结果:在串 S 的第 pos 个字符之前插入串 T. StrDelete (&S, pos, len) 初始条件: 存在,1≤pos≤StrLength(S)-len+1. 初始条件:串 S 存在,1≤pos≤StrLength(S)-len+1. 操作结果: 操作结果:从串 S 中删除第 pos 个字符起长度为 len 的 子串. 子串. } ADT String
10
100
第四章 串
865
Data Structure
2010-7-8
Page 1
学习目标
理解" 理解"串"类型定义中各基本操作的特点,并能正确利用它们进 类型定义中各基本操作的特点, 基本操作的特点 行串的其它操作. 行串的其它操作. 理解串类型的各种存储表示方法. 理解串类型的各种存储表示方法. 存储表示方法
如何表示串的长度? 如何表示串的长度? 方案1:用一个变量来表示串的实际长度. 方案 :用一个变量来表示串的实际长度. 方案2: 方案 :在串尾存储一个不会在串中出现的特殊字符 作为串的终结符,表示串的结尾. 作为串的终结符,表示串的结尾.
0
1
2
3
4
5
6
7 … … Max-1 空 闲
Page 15
Data Structure
2010-7-8
Page 5
由串相等引出: 由串相等引出:串的比较 串的比较:通过组成串的字符之间的比较来进行的. 串的比较:通过组成串的字符之间的比较来进行的. 字符之间的比较来进行的 给定两个串: 给定两个串:X="x1x2…xn"和Y="y1y2…ym",则: 和 , 1. 当n=m且x1=y1,…,xn=ym时,称X=Y; 且 ; 2. 当下列条件之一成立时,称X<Y: 当下列条件之一成立时, < : ⑴ n<m且xi=yi(1≤ i≤n); < 且 ) 存在k≤ - ) ⑵存在 ≤min(m,n),使得 i=yi(1≤i≤k-1)且xk<yk. ( , ) 使得x 例:S1="ab12cd ",S2="ab12",S3="ab13" , ,
知识点
串的类型定义,串的存储表示 串的类型定义,串的存储表示 类型定义
Data Structure
2010-7-8
Page 2
串(字符串),是计算机非数值处理的主要对象之一. 字符串),是计算机非数值处理的主要对象之一. ),是计算机非数值处理的主要对象之一
如,在汇编和编译程序中,源程序和目标程序都是串; 在汇编和编译程序中,源程序和目标程序都是串; 如,在事务处理程序中,顾客的姓名和地址,以及货物的名称, 在事务处理程序中,顾客的姓名和地址,以及货物的名称, 产地和规格等,通常也都作为串处理. 产地和规格等,通常也都作为串处理.
Data Structure
2010-7-8
Page 7
串的抽象数据类型 ADT String { 数据对象: CharacterSet, 数据对象:D={ai|ai∈CharacterSet, i=1,2,...,n, n≥0 } 数据关系:R1= 数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=2,...,n } 基本操作: 基本操作: StrAssign (&T, chars) 初始条件: 是串常量. 初始条件:chars 是串常量. 操作结果:赋于串T chars. 操作结果:赋于串T的值为 chars. StrCopy (&T, S) 初始条件: 存在. 初始条件:串 S 存在. 操作结果: 操作结果:由串 S 复制得串 T.