第四章串数组和广义表
PTA第四章串、数组和广义表练习题
B(2.0) D(2.0) D(2.0) D(2.0) D(2.0) A(2.0) B(2.0) B(2.0) D(2.0) C(2.0) D(2.0) D(2.0)
2-1
广义表是一种(B)数据结构。(2分)
1.非递归的
2.递归的
3.树型
4.图状
作者: 严冰
单位: 浙江大学城市学院
2-2
一个广义表为( a, (b, c), d, (), ((f, g), h) ),则该广义表的长度与深度分别为(D)。(2分)
1.4和6
2.6和3
3.3和5
4.5和3
作者: 严冰
单位: 浙江大学城市学院
2-3
稀疏矩阵的快速转置算法的时间复杂度是(D)。(2分)
1.三次方时间
2.二次方时间
3.对数时间
4.线性时间
作者: 严冰
单位: 浙江大学城市学院
2-4
在定义稀疏矩阵的十字链接存储结构时,每个结点结构需包含(D)个域。(2分)
1. 4
2. 3
3. 6
4. 5
作者: 严冰
单位: 浙江大学城市学院
2-5
广义表与稀疏矩阵都是线性表的扩展,它们的共同点为(D)。(2分)
1.都可以用链接结构与顺序结构存储
2.无共同点
3.都是递归结构
4.数据元素本身是一个数据结构
作者: 严冰
单位: 浙江大学城市学院
2-6
(neuDS_C++)以下叙述中正确的是(A )。(2分)
1.串是一种特殊的线性表
2.串的长度必须大于零
3.串中元素只能是字母
4.空串就是空白串
作者: 姚志军
单位: 广东东软学院
2-7
(neuDS_C++)串是一种特殊的线性表,其特殊性体现在(B )。(2分)
1.可以顺序存储
2.数据元素是一个字符
3.可以链接存储
4.数据元素可以是多个字符
PTA第四章串、数组和广义表练习题
B(2.0) D(2.0) D(2.0) D(2.0) D(2.0) A(2.0) B(2.0) B(2.0) D(2.0) C(2.0) D(2.0) D(2.0)
2-1
广义表是一种(B)数据结构。(2分)
1.非递归的
2.递归的
3.树型
4.图状
作者: 严冰
单位: 浙江大学城市学院
2-2
一个广义表为( a, (b, c), d, (), ((f, g), h) ),则该广义表的长度与深度分别为(D)。(2分)
1.4和6
2.6和3
3.3和5
4.5和3
作者: 严冰
单位: 浙江大学城市学院
2-3
稀疏矩阵的快速转置算法的时间复杂度是(D)。(2分)
1.三次方时间
2.二次方时间
3.对数时间
4.线性时间
作者: 严冰
单位: 浙江大学城市学院
2-4
在定义稀疏矩阵的十字链接存储结构时,每个结点结构需包含(D)个域。(2分)
1. 4
2. 3
3. 6
4. 5
作者: 严冰
单位: 浙江大学城市学院
2-5
广义表与稀疏矩阵都是线性表的扩展,它们的共同点为(D)。(2分)
1.都可以用链接结构与顺序结构存储
2.无共同点
3.都是递归结构
4.数据元素本身是一个数据结构
作者: 严冰
单位: 浙江大学城市学院
2-6
(neuDS_C++)以下叙述中正确的是(A )。(2分)
1.串是一种特殊的线性表
2.串的长度必须大于零
3.串中元素只能是字母
4.空串就是空白串
作者: 姚志军
单位: 广东东软学院
2-7
(neuDS_C++)串是一种特殊的线性表,其特殊性体现在(B )。(2分)
1.可以顺序存储
2.数据元素是一个字符
3.可以链接存储
4.数据元素可以是多个字符
数据结构 第4章 串、数组
6.删除子串 在串中删除从某一位置开始连续的字符。如在s串中,从 第p个字符开始连续删除j个字符。可能出现三种情况: (1)如果p值不在s串范围内,不能删除。 (2)从第p个字符开始到最后的字符数不足j个,删除时, 不用移动元素。 (3)p和j都可以满足要求。删除后,要把后面其余的元素 向前移动j位。 删除成功后函数返回值为1,否则函数返回值为0。 删除子串的C语言算法描述如下:
当计算机按字节(byte)单位编址时,一个机器字,即一个存储单 元刚好存放一个字符,串中相邻的字符顺序地存放在地址相邻的字节中。 若给定串s=″data structure″,则顺序串的存储如图4-1所示。
… d
a
t
a
s
t
r
u
c
t
u
r
e …
图4-1 顺序串存储示意图
当计算机按字(word)单位编址时,一个存储单元由若 干个字节组成。这时串的顺序存储结构有非紧缩存储和紧缩 存储两种方式。 1.串的非紧缩存储 假设计算机的字长为32位,即4个字节(bytes),则一 个存储单元仅存放一个字符时,就要浪费3个字节。若给定 串s=″data structure″,则非紧缩存储方式如图4-2所示。这 种存储方式的优点是对串中的字符处理效率高,但对存储空 间的利用率低。
#define MAX 50 /*定义一常量MAX为50*/ int substring(char *s, int n1,int n2, char *t) { int i,k; if((n1<1)||(n1>length(s)) /*如果位置不对则返回0值*/ return(0); for(k=0;(k<n2)&&(s[n1-1+k]!=’\0’);k++) /*从串s的第n1个 位置取出n2长度的子串放在t串中*/ t[k]=s[n1-1+k]; t[k]=’\0’; return(1); }
第四章 字符串、数组和广义表
4.2字符串的存储结构 4.2字符串的存储结构
对于字符串常量,只需作为一个字符的序列存储。 对于字符串变量,赋给它一个串名,对串运算时, 通过变量名访问其值。其存储分配有两种形式, 一是将字符串设计成一种结构类型(如pascal语言 一是将字符串设计成一种结构类型(如pascal语言 和c语言中,字符串都是用字符数组来实现),从 字符串名可直接访问到字符串值,字符串值的存 储分配是在编译时完成的;另一是字符串值的存 储分配在程序运行时完成,在字符串名和字符串 值之间需建立一个对照表(称为串名的存储映 象),字符串的访问通过串名的存储映象进行。 我们称前一种为顺序存储结构,后一种为链式存 储结构。
4.3.2模式匹配的KMP算法 4.3.2模式匹配的KMP算法
在执行简单匹配算法中的字符比较过程中,当出 现s[j+I]!=t[I]时,有 s[j+I]!=t[I]时,有 s[0]…s[j],s[j+1] …s[j+i-1],s[j+i] … …s[j+i!= t[0] t[1] t[it[i-1] t[i] … 这时,简单匹配算法对字符串S 这时,简单匹配算法对字符串S要回溯,回溯到从 s[j+1]开始继续与模式字符串T s[j+1]开始继续与模式字符串T从头开始逐一字符 比较,KMP算法是对正文字符串比较不回溯的算 比较,KMP算法是对正文字符串比较不回溯的算 法。如果对于模式字符串t存在一个整数k(k<i), 法。如果对于模式字符串t存在一个整数k(k<i), 使得模式t的开头k个字符(t[0],t[1], …,t[k-1])依次 使得模式t的开头k个字符(t[0],t[1], …,t[k-1])依次 与t[I]的前面k个字符(t[i-k],t[i+k-1], …,t[i-1])相同, t[I]的前面k个字符(t[i-k],t[i+k- …,t[i-1])相同, 即
第4章数组与串第4节广义表
第4章 数组与串 第4节 广义表
int *GLcopy(GLNode *p) //p为广义表头结点的指针 {
GLNode *q ; if (p==NULL) return NULL ; q=new GLNode; q->tag=p->tag ; if (p->tag==1)
q->val.dlink=GLcopy(p->val.dlink ) ; else
第4章 数组与串 第4节 广义表
4.4.2 广义表的存储 广义表都采用链式的存储结构来存储广义表。
结点形式为
Tag Dlink/data link
其中tag是标识域。若结点表示一个原子,则 tag=0,且第二个字段为data,它表示原子的名 称或数值;若结点表示的是一个广义表,则 tag=1,且第二字段为dlink,存放相应子表第一 个元素对应结点的地址。Link域是指向同层下一 个元素,若没有,即是同层最后一个结点,则置 link为空(NULL,或记为^ )。
广义表结构灵活,它可以兼容线性表、数组、 树和有向图等各种常用的数据结构。(当二维数 组的每行或每列作为子表处理时二维数组即为一 个广义表 )
第4章 数组与串 第4节 广义表
3.广义表基本运算 广义表主要有取头操作(Head)和取尾操作(Tail)
操作。
根据广义表的表头、表尾的定义可知,对于任意一 个非空的列表,其表头可能是单元素也可能是子表,而 表尾必为子表。例如:
《数据结构及其应用》笔记含答案 第四章_串、数组和广义表
第4章串、数组和广义表
一、填空题
1、零个或多个字符组成的有限序列称为串。
二、判断题
1、稀疏矩阵压缩存储后,必会失去随机存取功能。(√)
2、数组是线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。(╳)
3、若采用三元组存储稀疏矩阵,把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算。(╳)
4、若一个广义表的表头为空表,则此广义表亦为空表。(╳)
5、所谓取广义表的表尾就是返回广义表中最后一个元素。(╳)
三、单项选择题
1、串是一种特殊的线性表,其特殊性体现在(B)。
A.可以顺序存储B.数据元素是一个字符
C.可以链式存储D.数据元素可以是多个字符若
2、串下面关于串的的叙述中,(B)是不正确的?
A.串是字符的有限序列B.空串是由空格构成的串
C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储
解释:空格常常是串的字符集合中的一个元素,有一个或多个空格组成的串成为空格串,零个字符的串成为空串,其长度为零。
3、串“ababaaababaa”的next数组为(C)。
A.012345678999 B.012121111212 C.011234223456 D.0123012322345
4、串“ababaabab”的nextval为(A)。
A.010104101B.010102101 C.010100011 D.010101011
5、串的长度是指(B)。
A.串中所含不同字母的个数B.串中所含字符的个数
C.串中所含不同字符的个数D.串中所含非空格字符的个数
解释:串中字符的数目称为串的长度。
模块4 数组、串和广义表
Loc(a[i])=Loc(a[c1])+(i-c1)*d
数组的顺序存储结构
二维数组的存储
(1)行优先顺序 将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。 (2)列优先顺序 将数组元素按列向量排列,第j+1个列向量紧接在第j个列向量后面。
带状矩阵A 对于三对角带状矩阵的压缩存储,假设以行序为主序进行存储,并且只存 储非零元素:
Loc(aij)=Loc(a11)+3(i-1)-1+j-i+1= Loc(a11)+2(i-1)+j-1
特殊矩阵的压缩存储
稀疏矩阵
一般地,当非零元素个数只占矩阵元素总数的25%—30%,或低于这 个百分数时,称这样的矩阵为稀疏矩阵。 。
稀疏矩阵A 对于稀疏矩阵的压缩存储就要求在存储非零元素的同时,还必须存储一些 辅助信息,即该非零元素在矩阵中所处的行号和列号。
特殊矩阵的压缩存储
稀疏矩阵
稀疏矩阵A
稀疏矩阵A的三元组
特殊矩阵的压缩存储
稀疏矩阵的链式存储表示---十字链表
在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点 除了(row,col,value)以外,还有以下两个链域: right:用于链接同一行中的下一个非零元素; down:用于链接同一列中的下一个非零元素;
四、串、数组和广义表
四、串、数组和⼴义表
(内容待完善)
知识点
串的模式匹配⼜称⼦串定位运算或串匹配。在匹配中,将主串称为⽬标(串),⼦串称为模式(串)。
BF法(Brute Force):
KMP法:
串的模式匹配的两种⽅法。BF法,朴素的串匹配法。KMP法,尽可能的滑动得更远,利⽤部分的匹配结果。
朴素的模式匹配算法(BF算法)
图⽰说明
第⼀轮⽐较:
第⼆轮⽐较:
...... 原理⼀致,省略中间步骤
第五轮:
第六轮:
第⼀轮:⼦串中的第⼀个字符与主串中的第⼀个字符进⾏⽐较
若相等,则继续⽐较主串与⼦串的第⼆个字符
若不相等,进⾏第⼆轮⽐较
第⼆轮:⼦串中的第⼀个字符与主串中第⼆个字符进⾏⽐较......
第N轮:依次⽐较下去,直到全部匹配
代码实现:
(略)
BF算法优点:思想简单,直接,缺点:每次字符不匹配时,都要回溯到开始位置,时间开销⼤。时间复杂度 O((n-m+1)*m) 。
KMP模式匹配算法
图⽰说明:
从图中,我们可以很容易的发现,因为前⾯的字符,S和T中存在同的元素,所以S不必回溯到S[1]的位置,T也不必回溯到T[0]的位置。我们就可直接跳过对相同元素的回溯⽐较,直接⽐较S[8]与T[3]。
因此我们构建⼀个next数组储存回溯位置。
KMP算法的思想:假设在模式匹配的进程中,执⾏T[i]和W[j]的匹配检查。若T[i]=W[j],则继续检查T[i+1]和W[j+1]是否匹配。next数组两种求法
(1)第⼀种求法:根据前⼀个字符的next值求
初始化:
代码实现:
1 char t[]={"ababaabab"};
2 int Len=strlen(t);
第四章串、数组和广义表PPT课件
4.1.2 串的抽象数据类型
求子串操作SubStr(s, i, len)示例
i = 3, len = 3
abcdefge
i = 7, len = 4
abcdefge
空串
cde
ge
第8页/共68页
4.1.3 串与线性表的比较
• 逻辑结构 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。
第23页/共68页
4.1.4 匹配模式——BP算法
例:主串S="ababcabcacbab",模式T="abcac"
i
第 ababcabcacbab
3
趟
abcac
j
i=7,j=5失败; i“回溯”到4,j回溯到1
第24页/共68页
4.1.4 匹配模式——BP算法
例:主串S="ababcabcacbab",模式T="abcac"
第3页/共68页
4.1.1 串的基本概念
串(String):零个或多个字符组成的有限序列。
s ' a1a2 an '
串名
串值
串长
n
空串
n=0
第4页/共68页
4.1.1 串的基本概念
a=‘BEI’, b=‘JING’ c=‘BEIJING’ d=‘BEI JING’
合肥工业大学《数据结构》课件 ch4--串、数组与广义表
Data Structure
第4章 串、数组与广义表
【本章内容】 4.1 串
4.1.1 串的定义 4.1.2 串的运算 4.1.3 串的存储 4.2 数组 4.2.1 数组的定义和运算 4.2.2 数组的顺序存储 4.2.3 矩阵的压缩存储 4.3 广义表 4.3.1 广义表的定义 4.3.2 广义表的运算 4.3.3 广义表的存储
(2) #typedef char elementType; (3)逐结点比较(S1指针Pa、S2指针Pb):
第一个字符不同,返回-1或1; 相同,S1和S2均未结束,取下一个字符,循环。 当一个串结束,另一个串没结束处理:
S1结束,S2未结束,S1<S2,return -1; S1未结束,S2结束,S1>S2,return 1
一个结点存储多个字符时,最后结点可能有 空位置。
head A
B
C
……
H
I∧
(a) 结点大小为 1 的链串
head AB C D
EF GH
I ΦΦΦ∧
(b) 结点大小为 4 的链串
【例3.1】结点容量为1的链串S1和S2实现运算 strcmp(S1,S2),根据情况返回-1、0和1。
【分析】 (1)可用带头结点的单链表实现;
【算法描述-1】 int strcmp( node* S1, node* S2 ) { node *Pa=S1->next, *Pb=S2->next;
串数组和广义表
求next函数值的过程是一个
递推过程,分析如下:
已知:next[1] = 0;
假设:next[j] = k;又 T[j] = T[k]
则: next[j+1] = k+1 若: T[j] T[k]
则需往前回朔,检查 T[j] = T[ ?]
这实际上也是一个匹配的过程,
不同在于:主串和模式串是同一个串
(2) StrCompare (S,T)
(3) StrLength (S) (4) Concat(&T,S1,S2)
//串赋值 //串比较
//求串长 //串联
第6页,此课件共59页哦
22002222年2月20日日
(5) SubString(&Sub,S,pos,len) //求子串
(6) StrCopy(&T,S)
(13) DestroyString(&S)
//串销毁
}ADT String
第7页,此课件共59页哦
北京林业大学信息学院
22002222年年22月月2200日日
串的存储结构
顺序存储
链式存储
第8页,此课件共59页哦
22002222年年22月月2200日日
顺序存储表示
typedef struct{
char *ch;
E. 0 1 1 0 0 1 1 1 0
第4章 串、多维数组与广义表
4.1.1 串的定义
子串:串中任意个连续的字符组成的子序列称为该串的 子串。 主串:包含子串的串称为该子串的主串。 例如:S1="anhui",S2="huaibei",S="anhui huaibei",其中S1、S2都是S的子串。S为S1、S2的 主串。 空格串:由一个或多个空格组成的串称为空格串,空格 串的长度不为零。 空串:长度为0的串称为空串,通常用来表示,在C程 序中表示成"",它是任意串的子串。 模式匹配:求子串在主串中的起始位置称为子串定位或 模式匹配。例如:S1在S中的位置是1,而S2在S中 的位置是7。
4.1.2 串的表示(串的定长顺序存储表示 )
(1)串联接操作 把两个串T1和T2首尾连接成一个新串S。T1[0]、T2[0]和 S[0]分别存放串的实际长度。在操作时需考虑可能出现的 三种情况: ①当T1[0]+T2[0]≤MAXSIZE,即两串联接得到的串S是串T1 和串T2联接的正常结果,S[0]=T1[0]+T2[0]; ②当T1[0]<MAXSIZE 而T1[0]+T2[0]>MAXSIZE,将T2做 截断处理,即将T2中多出部分舍去。S[0]=MAXSIZE; ③当T1[0]=MAXSIZE,不连接,则两串联接得到的S串实际 上只是串T1的拷贝,串t2全部被截断,S[0]=MAXSIZE。
第4章串、数组和广义表
k=2(i-1)+j-1
(| i - j | ≤ 1)
a11 a12 a21 a22 a23 a32 k= 0 1 2 3 4 5
2、稀疏矩阵的压缩存储
稀疏矩阵的压缩存储方法很多,诸 如三元组顺序表、二元组顺序表、 带辅助向量的二元组顺序表和十字 链表等。
1)稀疏矩阵的三元组表示
#define MAXSIZE 100 /*非零元素最多个数*/
i (i – 1) +j-1 当 i≥j
2 k=
j (j – 1) +i-1 当 i<j
2
a12
a13
= =
a11 a21 a22 a31 k= 0 1 2 3
ann n(n+1)
2 -1
2) 三角矩阵
矩阵的上(下)三角(不包括对角线)中的元素均 为常数 c 的 n 阶矩阵。
a11
C
a21 a22
4.2 数组
4.2.1数组的基本概念
一维数组
二维数组
三维数组
行向量 下标 i 列向量 下标 j
页向量 下标 i 行向量 下标 j 列向量 下标 k
4.2.2 数组的顺序表示和实现
(1)一块足够大的连续 内存空间。
(2)一个寻址函数Loc。
1、一维数组的寻址函数
一维数组A[b..b+n-1] 寻址函数:
第4章数组和广义表
第4章数组和广义表
第4章数组和广义表
本章主要介绍下列内容:
1.数组的定义、基本运算和存储结构
2.特殊矩阵的压缩存储
3.广义表的定义、术语、存储结构、运算
4.递归算法设计
课时分配:
1两个学时,2两个学时,3两个学时, 4两个学时
重点、难点:
特殊矩阵的压缩存储、广义表的存储结构、递归算法设计
第一节数组
1.数组的定义和基本运算
数组的特点是每个数据元素可以又是一个线性表结构。因此,数组结构可以简单地定义为:若线性表中的数据元素为非结构的简单元素,则称为一维数组,即为向量;若一维数组中的数据元素又是一维数组结构,则称为二维数组;依次类推,若二维数组中的元素又是一个一维数组结构,则称作三维数组。
结论:线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。举例:
其中,A是数组结构的名称,整个数组元素可以看成是由m个行向量和n个列向量组成,其元素总数为m×n。在C语言中,二维数组中的数据元素可以表示成a[表达式1][表达式2],表达式1和表达式2被称为下标表达式,比如,a[i][j]。数组结构在创建时就确定了组成该结构的行向量数目和列向量数目,因此,在数组结构中不存在插入、删除元素的操作。
二维数组结构的基本操作:
(1)给定一组下标,修改该位置元素的内容
Assign(A,elem,index1,index2)
(2)给定一组下标,返回该位置的元素内容Value(A,elem,index1,index2)
2.数组的存储结构
从理论上讲,数组结构也可以使用两种存储结构,即顺序存储结构和链式存储结构。然而,由于数组结构没有插入、删除元素的操作,所以使用顺序存储结构更为适宜。换句话说,一般的数组结构不使用链式存储结构。组成数组结构的元素可以是多维的,但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。举例:LOC(i,j)=LOC(0,0)+(n*i+j)*L
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1.4 串的存储结构
串是一种特殊的线性表,其存储表示和线性表类似,但又 不完全相同。串的存储方式取决于将要对串所进行的操作 。串在计算机中有3种表示方式:
定长顺序存储表示:将串定义成字符数组,利用串名可 以直接访问串值。用这种表示方式,串的存储空间在编 译时确定,其大小不能改变。
堆分配存储方式:仍然用一组地址连续的存储单元来依 次存储串中的字符序列,但串的存储空间是在程序运行 时根据串的实际长度动态分配的。
Leabharlann Baidu
子串 主串 字符位置 子串位置 串相等 空格串
4.1.2 串的抽象数据类型
ADT String{ 数据对象:D = { ai|ai∈CharacterSet, i=1,2,…,n, n ≥0 } 数据关系:R = {<ai-1, ai>| ai-1, ai∈D, i=2,3,…,n } 基本操作: ⑴ StrLength (s):求串s的长度。 ⑵ StrAssign (s1, s2):赋值,将s2的值赋值给串s1。 ⑶ StrConcat (s1, s2, s):连接,将串s2放在串s1的后面连接
如何表示串的长度?
方案1:用一个变量来表示串的实际长度。 方案2:在串尾存储一个不会在串中出现的特殊字符 作为串的终结符,表示串的结尾。 方案3:用数组的0号单元存放串的长度,从1号单 元开始存放串值。
0 1 2 3 4 5 6 …77…………M…ax-M1ax-1
a9 ab bc cd de ef gf \g0空 闲空 闲9
按这种串的表示方法实现的串的运算时,其基本操作为 “字符序 列的复制”。
定长顺序存储结构定义为:
#define MAX_STRLEN 256 typedef struct { char str[MAX_STRLEN] ;
int length; } StringType ;
4.1.4 串的存储结构
⑺ StrInsert (s, i, t):插入,将串t插入到串s中的第i个位置。 ⑻ StrDelete (s, i, len):删除,在串s中删除从第i个字符开始
的连续len个字符。 ⑼ StrRep (s, t, r):替换,在串s中用串r替换所有与串t相等
的子串。
}ADT String
4.1.2 串的抽象数据类型
调用标准库函数 #include<string.h>
串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from) 串连接,strcat(char to,char from) 求串长,strlen(char s) ……
4.1.1 串的基本概念
第四章 串、数组和广义表
2 学时
教学目标
了解串的存储方法,理解串的两种模式匹配算法,重点掌 握BF算法。
明确数组和广义表这两种数据结构的特点,掌握数组地址 计算方法,了解几种特殊矩阵的压缩存储方法。
掌握广义表的定义、性质及其GetHead和GetTail的操作 。
数据结构
第一节
串
补充:C语言中常用的串运算
4.1.4 串的存储结构
串的联接算法中需分三种情况处理:
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断, 则返回TRUE,否则FALSE。 if (S1[0]+S2[0] <= MAXSTRLEN) {// 未截断
块链存储方式:是一种链式存储结构表示。
4.1.4 串的存储结构
串的定长顺序存储表示
这种存储结构又称为串的顺序存储结构。是用一组连续的存储单元来 存放串中的字符序列。所谓定长顺序存储结构,是直接使用定长的字 符数组来定义,数组的上界预先确定。
特点:
串的实际长度可在这个予定义长度的范围内随意设定,超过予定义 长度的串值则被舍去,称之为“截断” 。
T[0] = MAXSTRLEN; uncut = FALSE; } else { // s1截断(仅取S1)
T[1..MAXSTRLEN] = S1[1..MAXSTRLEN];
T[0] = MAXSTRLEN
uncut = FALSE;
}
return uncut;
} // Concat
4.1.4 串的存储结构
求子串操作SubStr(s, i, len)示例
i = 3, len = 3
abcdefge
i = 7, len = 4
abcdefge
空串
cde
ge
4.1.3 串与线性表的比较
逻辑结构 串的逻辑结构和线性表极为相似,区别仅在于串的数据对 象约束为字符集。
基本操作 在线性表的基本操作中,大多以“单个元素”作为操作 对象; 在串的基本操作中,通常以“串的整体”作为操作对象 。
成一个新串s。 ⑷ SubStr (s, i, len):求子串,返回从串s的第i个字符开始取
长为 len 的子串。
4.1.2 串的抽象数据类型
⑸ StrCmp (s1, s2):串比较,若s1=s2,返回0;若s1<s2, 返 回-1;若s1>s2, 返回1。
⑹ StrIndex (s, t):定位,返回子串t在主串s中首次出现的位 置。若t不是s的子串,则返回0。
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] <MAXSTRLEN) { // s2截断,s1未截断
T[1..S1[0]] = S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN] = S2[1..MAXSTRLEN-S1[0]];
串(String):零个或多个字符组成的有限序列。
s'a1a2an'
串名
串值
串长
n
空串
n=0
4.1.1 串的基本概念
a=‘BEI’, b=‘JING’ c=‘BEIJING’ d=‘BEI JING’
a和b是c和d的子串 a在c和d中的位置是1。 b在c中的位置是4,在d中的位置为5。 ‘ ’是空格串Φ