数据结构第四章
严蔚敏数据结构-第四章 串

15
(2)S1串长 最大串长 串长<最大串长 串长 最大串长; S1,S2串长和 最大串长 串长和>最大串长 串长和 最大串长;
S1 6 a b c d e f S2 6 g h i j k l T 8 a b c d e f g h
3
串的抽象数据类型的定义: 串的抽象数据类型的定义: ADT String{ 数据对象: 数据对象:D={ai|ai∈CharacterSet, i=1,2,...,n, n>=0} 数据关系: 数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=2,...,n} 基本操作: 基本操作: StrAssign(&T, chars)
11
作业: 作业: 1.用5种串的基本操作(StrAssign、StrCompare、StrLen Concat、SubString)来逻辑实现StrInsert(&S, pos, T)操作 、 操作. )
Status StrInsert(String S, int pos , String T) { if ……….. return error; , , ); ); ); );
chars是字符串常量。生成一个其值等于chars的串 。 是字符串常量。生成一个其值等于 的串T。 是字符串常量 的串
StrCopy(&T, S)
存在则由串S复制得串 串S存在则由串 复制得串 存在则由串 复制得串T
StrEmpty(S)
存在则若S为空串 串S存在则若 为空串 返回真否则返回假 存在则若 为空串,返回真否则返回假
Sub返回串 的第pos个字符起长度为 返回串S的第 个字符起长度为len的子串 用Sub返回串S的第pos个字符起长度为len的子串
数据结构第4章 数组和广义表

第4章数组和广义表【例4-1】二维数组A的每一个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。
若A以行为主序存储元素,A[8][5]的物理地址与当A按列为主序存储时的元素()的物理地址相同。
设每个字符占一个字节。
A.A[8][5] B.A[3][10] C.A[5][8] D.A[0][9]解:二维数A是一个9行10列的矩阵,即A[9][10]。
按行存储时,A[8][5]是第85个元素存储的元素。
而按列存储时,第85个存储的元素是A[3][10]。
即正确答案为B。
【例4-2】若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[n(n+1)/2]中,则在B中确定的位置k的关系为()。
A.jii+-2)1(*B.ijj+-2)1(*C.jii++2)1(*D.ijj++2)1(*解:如果a ij按行存储,那么它的前面有i-1行,其有元素个数为:1+2+3+…+(i-1)=i(i-1)/2。
同时它又是所在行的第j列,因此它排列的顺序还得加上j,一维数组B[n(n+1)/2]中的位置k与其下标的关系是:jii+-2)1(*。
因此答案为A。
【例4-3】已知n阶下三角矩阵A,按照压缩存储的思想,可以将其主对角线以下所有元素(包括主对角线上元素)依次存放于一维数组B中。
请写出从第一列开始以列序为主序分配方式时在B中确定元素a ij的存放位置的公式。
解:如果a ij按列存储,那么它的前面有j-1列,共有元素:n+(n-1)+(n-2)+ …+[n-(j-2)]=(j-1)*n-2)1)(2(--jj而它又是所在列的第i行,因此在它前的元素个数还得加上i。
因此它在一维数组B中的存储顺序为:(j-1)*n-2)1)(2(--jj+i【例4-4】已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出的原子项ASCII码最大的运算是()。
数据结构答案第4章

第 4 章广义线性表——多维数组和广义表2005-07-14第 4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。
【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。
除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。
⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。
【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。
⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。
【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。
⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。
【解答】三元组顺序表,十字链表⑸广义表((a), (((b),c)),(d))的长度是(),深度是(),表头是(),表尾是()。
【解答】3,4,(a),((((b),c)),(d))⑹已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是()。
【解答】Head(Head(Tail(LS)))2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。
数据结构——第4章 串(C#)

4.1.1 什么是串 串(或字符串)是由零个或多个字符组成的有限序列。 记作str="a1a2…an"(n≥0),其中str是串名,用双引号括 起来的字符序列为串值,引号是界限符,ai(1≤i≤n)是一 个任意字符(字母、数字或其他字符),它称为串的元素, 是构成串的基本单位,串中所包含的字符个数n称为串的 长度,当n=0时,称为空串。
4.2 串的存储结构
4.2.1 串的顺序存储结构-顺序串
和顺序表一样,用一个data数组(大小为MaxSize)和 一个整型变量length来表示一个顺序串,length表示data数 组中实际字符的个数。 定义顺序串类SqStringClass如下:
class SqStringClass { const int MaxSize=100; public char[] data; //存放串中字符 public int length; //存放串长 public SqStringClass() //构造函数,用于顺序串的初始化 { data=new char[MaxSize]; length=0; } //顺序串的基本运算 }
(9)串输出DispStr() 将当前串s的所有字符构成一个字符串并输出。对应的算 法如下:
public string DispStr() { int i; string mystr=""; if (length==0) mystr = "空串"; else { for (i=0;i<length;i++) mystr+=data[i].ToString(); } return mystr; }
数据结构第4章 串

/*若串s和t相等则返回0;若s>t则返回正数;若s<t则返 回负数*/
{ int i;
for (i=0;i<s.len&&i<t.len;i++)
if (s.ch[i]!=t.ch[i]) return(s.ch[i] - t.ch[i]);
初 始 条 件 : 串 S 存 在 ,1≤pos≤StrLength(S) 且 1≤len≤StrLength(S)-pos+1
操作结果:用Sub返回串S的第pos个字符起长度为len的子串
返回主目录
(11)StrIndex(S,T,pos)
初始条件: 串S和T存在,T是非空串, 1≤pos≤StrLength(S)
return(s.len); }
返回主目录
(7)清空函数
StrClear(SString *s) /*将串s置为空串*/ {
s->len=0; }
返回主目录
(8)连接函数
(1) 连接后串长≤MAXLEN,则直接将B加在A的 后面。 (2) 连接后串长>MAXLEN且LA<MAXLEN,则B 会有部分字符被舍弃。 (3) 连接后串长>MAXLEN且LA=MAXLEN,则B 的全部字符被舍弃(不需连接)。
for (i=s->len + t.len-1;i>=t.len + pos;i--)
s->ch[i]=s->ch[i-t.len];
for (i=0;i<t.len;i++) s->ch[i+pos]=t.ch[i];
s->len=s->len+t.len;
数据结构第4章数组和串

● 教学目的:理解抽象数据类型数组的概念, 掌握数组的不同存储结构的实现及应用,了 解广义表的相关概念,掌握串的逻辑结构、 存储结构及其基本运算。
● 教学重点:数作在不同 存储结构上的实现。 ● 教学难点:带状矩阵的压缩存储;稀疏矩 阵的三元组表实现及其转置算法,堆结构的 串操作实现;串的模式匹配算法。
矩阵的压缩存储
printf("Array a:\n"); k=0; for(i=0;i<N;i++)//输出矩阵A { for(j=0;j<N;j++) if(i<j)printf("%5d",sa[M-1]); else printf("%5d",sa[i*(i+1)/2+j]); printf("\n"); } printf("Array b:\n"); k=0; for(i=0;i<N;i++)//输出矩阵B { for(j=0;j<N;j++) if(i>j)printf("%5d",sb[M-1]); else printf("%5d",sb[j*(j+1)/2+i]); printf("\n"); }}
矩阵的压缩存储
由此可见,要唯一表示一个稀疏矩阵,在存储三 元组表的同时还需存储该矩阵总的行数、列数及非 零元个数。 练习:写出图4-9(a)所示稀疏矩阵的三元组表。
三元组表(也是线性表)的存储方式主要有两种: 顺序存储和链式存储,从而可引出稀疏矩阵的两种 压缩存储方法:三元组顺序表和十字链表。 3、三元组顺序表
矩阵的压缩存储
数据结构-第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 串及其基本运算4.1.1 串的基本概念1.串的定义串是由零个或多个任意字符组成的字符序列。
一般记作:s="s1 s2 … s n""其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容;a i(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串,通常记为Ф。
2.几个术语子串与主串:串中任意连续的字符组成的子序列称为该串的子串。
包含子串的串相应地称为主串。
子串的位置:子串的第一个字符在主串中的序号称为子串的位置。
串相等:称两个串是相等的,是指两个串的长度相等且对应字符都相等。
4.2 串的定长顺序存储及基本运算因为串是数据元素类型为字符型的线性表,所以线性表的存储方式仍适用于串,也因为字符的特殊性和字符串经常作为一个整体来处理的特点,串在存储时还有一些与一般线性表不同之处。
4.2.1 串的定长顺序存储类似于顺序表,用一组地址连续的存储单元存储串值中的字符序列,所谓定长是指按预定义的大小,为每一个串变量分配一个固定长度的存储区,如:#define MAXSIZE 256char s[MAXSIZE];则串的最大长度不能超过256。
如何标识实际长度?1. 类似顺序表,用一个指针来指向最后一个字符,这样表示的串描述如下:typedef struct{ char data[MAXSIZE];int curlen;} SeqString;定义一个串变量:SeqString s;这种存储方式可以直接得到串的长度:s.curlen+1。
如图4.1所示。
s.dataMAXSIZE-1图4.1 串的顺序存储方式12. 在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
两个串相等,当且仅当两个串长度相同,并且各个对应位
置的字符都相同。
s1=“abcd”,s2=“aBcd”
s1和s2不相等。
北京邮电大学世纪学院
算法与数据结构 第四章
4.1.2 串的基本操作
(1)字符串的长度计算 (2)字符串的复制 (3)字符串的连接 (4)字符串的替换 (5)字符串的插入 (6)字符串的删除 (7)字符串的比较
算法与数据结构 第四章
(3)空格串
由一个或多个空格组成的串,不等于空串,长度是串中包 含空格个数。
串的实例
“This is a string” “string” “ “” ”
串长度
16 6 1 0 空格也算一个字符
注
空格串: 仅由一个或多个空格组成的串 空串: 长度为0的串称为空串,它不包括任何 字符 串中所包含的字符可以是字母、数字或其他 字符,这依赖于具体计算机所允许的字符集
北京邮电大学世纪学院
第四章 串
目 录
4.1 串的概念及基本运算 4.2 串的存储结构 4.3 串的查找——模式匹配
内容特殊的线性表——(字符)串
非数值数据
源码翻译为机器码
利用计算机把一种自然源语言转变为
另一种自然目标语言的过程,一般指 自然语言之间句子和全文的翻译。
机器 翻译
字符 编译
搜索 引擎
typedef struct { } char str[MAXSIZE]; int lenrth; String; //串的长度
北京邮电大学世纪学院
算法与数据结构 第四章
4.1.3 链式串
1. 单字符结点链 可用单链表方式来存储串值。链串与单链表的差异只
是它的结点数据域为字符。
typedef struct Node { char data; struct Node *next; } SCharNode;
子串 t 在主串 s 中的位置为3。 ab abc abcac
s = “The C Program is not c program” , t = “program” 子串 t 在主串 s 中的位置为 24 。
北京邮电大学世纪学院
算法与数据结构 第四章
(7)串的比较
“a0 a1…… an”
“b0b 1…… bm”
北京邮电大学世纪学院
算法与数据结构 第四章
2. 块链
typedef struct Node
{ char data[Number]; //块链
struct Node *next; } NCharNode;
算法与数据结构 第四章
4.3 串的查找—模式匹配
字符串的查找——模式匹配
搜索引擎——做字符串査找匹配的工作。 模式匹配算法是搜索引擎的关键, 它直接影响系统的实时性能。
(8)抽取字符串
(9)字符串的分割 (10)字符串的查找
北京邮电大学世纪学院
算法与数据结构 第四章
C语言中字符串操作函数
北京邮电大学世纪学院
算法与数据结构 第四章
北京邮电大学世纪学院
算法与数据结构 第四章
例4.1 C语言中的串函数
北京邮电大学世纪学院
算法与数据结构 第四章
北京邮电大学世纪学院
串的比较,按照字符的ASII码进行比较:
先比较第一个字符的大小 “abc”>”ABC” “abs”<“ads” “abcd”>”abc”
若 a0 b0 ,则a<b;
若 a0 b0 ,则a>b;
若 a b ,比较第二个字符; 0 0
依次类推
北京邮电是指根据一定的策略、 运用特定的计算机程序从互联 网上搜集信息,在对信息进行 组织和处理后,为用户提供检 索服务,将用户检索相关的信 息展示给用户的系统。
字符串 处理
文献 查询
计算机将检索者输入检索系 统的检索提问 ( 即检索标识 ) 按检索者预先制定的检索策 略与系统文档(机读数据库) 中的存贮标识进行类比、匹 配运算 ,通过“人机对话”而 检索出所需要的文献
算法与数据结构 第四章
4.1 串的概念及基本运算
北京邮电大学世纪学院
算法与数据结构 第三章
4.1.1 串的基本概念
1. 串的定义
串是一种特殊的线性表,它是由n (≥ 0)个字符组成的 有限序列。 记作 s = “a1,a2, a3, ... an” s—串名, a1,a2, a3, ... an—串值
“你好”
4
北京邮电大学世纪学院
算法与数据结构 第四章
(4)子串、主串
串中任意一个连续的字符组成的子序列称为该串的子串,
空串是任何串的子串。包含子串的字符串称为主串。 c = “ DATA STRUCTURE” f=“DATA” f是c的子串; 空串 是c的子串; c是f, 的主串。
北京邮电大学世纪学院
ai是串中字符,n是串的长度
a1 a2 ... ai ... an
ai是字符
北京邮电大学世纪学院
算法与数据结构 第四章
s1=“Student”
串名
串值
注意:串中字符区分大小写!
2. 基本术语
(1)串长度
串中所包含的字符个数。
(2)空串 零个字符的串,称为空串,它的长度为零,记为 。
北京邮电大学世纪学院
北京邮电大学世纪学院
算法与数据结构 第四章
串的模式匹配又称为字串定位运算:扫描主串S,寻
找子串T在主串S中首次出现的位置。
主串S称为目标串; 字串T称为模式串。
北京邮电大学世纪学院
算法与数据结构 第四章
匹配结果
成功
返回子串T在S中的起始位置
失败
返回约定标记
模式匹配的常用算法:BF算法和KMP算法
算法与数据结构 第四章
(5)字符在串中的位置
一个字符在序列中的序号称为该字符在串中的位置。
c = “ DATA STRUCTURE”
‘D’的位置是1;
‘S’的位置是6.
北京邮电大学世纪学院
算法与数据结构 第四章
(6)子串的位置
子串t 在主串S中的位置是指:主串s 中第一个与t相同的子
串的首字母在主串中的位置。 s = “ababcabcac” , t = “abc”
算法与数据结构 第四章
算法与数据结构 第四章
4.2 串的存储结构
北京邮电大学世纪学院
算法与数据结构 第四章
由于串是一种特殊的线性表,它的每个结点仅由 一个字符组成,因此存储串的方法也同样可以采用 顺序存储或链式存储。
北京邮电大学世纪学院
算法与数据结构 第四章
4.1.2 顺序串
串中的字符顺序地存储在内存一片相邻的空间。