数据结构第4章

合集下载

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

严蔚敏数据结构-第四章 串
S1 4 a b c d S2 2 e f T 6 a b c d e f
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 章广义线性表——多维数组和广义表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章 串(C#)
将当前链串的所有结点?nstr将q结点插入到尾部将q结点插入到尾部将链串t的所有结点?nstr将q结点插入到尾部尾结点的next置为null返回新建的链串5求子串substrij返回当前串中从第i个字符开始的连续j个字符组成的子串ຫໍສະໝຸດ 第4章 串4.1 串的基本概念
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章 矩阵乘法

数据结构 第4章 矩阵乘法

用经典算法。
α11 A α21
α31
α12 α22 α32
α13 α23 α33
α14
α24
B
α34
b11 b21 b31 b41
b12 b22 b32 b42
b13
b23
b33
Q
b43
A*B
c11 c21 c31
c12 c22 c32
c13
c23
c33
4
cij aik bkj ai1b1 j ai2b2 j ai3b3 j ai4b4 j , i 1,2,3, j 1,2,3
ci1 ai1b11 ai2b21 ai3b31 ai4b41 ci2 ai1b12 ai2b22 ai3b32 ai4b42 ci3 ai1b13 ai2b23 ai3b33 ai4b43
注意:对任意k=1,2,3,4,乘 积项aikbkj 必是且只能是cij求 和公式中的一项, 故可改变 计算aikbkj 的次序。
b23
b33 b43
C
A*B
c11 c21
c31
c12 c22 c32
c13
c23
c33
cij aik bkj ai1b1 j ai2b2 j ai3b3 j ai4b4 j , i 1,2,3, j 1,2,3
k 1
经典算法中乘积项aikbkj计算次序
ci1 ai1b11 ai2b21 ai3b31 ai4b41 ci2 ai1b12 ai2b22 ai3b32 ai4b42
b12 b22 b32 b42
b13
b23
C
b33
b43
A*B
c11 c21 c31

数据结构第4章 串

数据结构第4章  串
ring s, SString t)
/*若串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章 串

数据结构-第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. 在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。

数据结构第四章串

数据结构第四章串

(2) 置换操作:用联接算法来实现。用在求子串序号(a,b,h)中得到的 ind 将a分成3部分:第一部分是b在a中的第一个位置前的子串substr (a,1,ind-1);第二部分是b(以c来代替);第三部分是b在a中的最后一个 位置后的子串substr(a,ind+m,n)。 即 a substr(a,I,ind-1)||c||substr(a,ind+m,n)
4. 2 串的基本运算
对于串的基本操作,许多高级语言均提供了相应的运算或标准 库函数来实现。下面仅介绍几种常用的串运算。 (1)联接(concatenation) 联接是串的最基本,最重要的运算。两个串的联接是将一个串 紧接着放在另一个串的末尾。联接用符号“||”表示。 例如:a=”bei” b=“jing” a || b=“beijing” (2)求子串(substr) SUBSTR(a,m,n)功能: 从a 中截取子串,从第m个字符到第n个 字符的子串(m<n)。子串应是将串a中取出从标号m开始的连续n -m+1个字符。 例:SUBSTR(“ABCDEFG”,2,3)=”BC” 利用求子串及联接两种运算可以完成对串的插入、删除和修改。 例如: a=“bejing” b=“iy” ,将b插入到a的第二个字符之后 得到新的串s,则 s=substr(a,1,2) || b || substr(a,3,6) =“beiyjing”
(5)置换(repleace) 置换运算repleace(a,b,c)表示在a中搜索b,若b是a的 子串,就以c代替b,若不是,则经置换后,a不变。 例如:a=“monday”, b=“mon”, c=“thurs” repleace(a,b,c)=“thursday” 置换运算是将串a中所有的子串b用c来代替。 在一部分程序设计语言中没有实现,仍可用前三种运 算来完成。 置换算法过程:实现置换运算repleace(a,b,c),同 样也是在a中搜索是否与b相同的子串,若有,以c来代 替,再继续向下搜,直到在a中找不到和b相同的子串 为止。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北华航天工业学院计算机系 制作
4.2.4 基于堆结构的串的基本运算
总结: 总结: 以上堆空间和算法是由算法编写者自己 设计和编写来实现的,在这里, 设计和编写来实现的,在这里,重点介绍这 种存储的处理思想, 种存储的处理思想,很多问题及细节尚未涉 如废弃串的回收、自由区的管理等。 及,如废弃串的回收、自由区的管理等。 在常用的高级语言及开发环境中, 在常用的高级语言及开发环境中,大多 数系统本身都提供了串类型及大量的库函数 提供了串类型及大量的库函数, 数系统本身都提供了串类型及大量的库函数, 用户可直接使用。 用户可直接使用。
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
建立索引项的方法: 建立索引项的方法: 1.带串长度的索引表 1.带串长度的索引表 索引项的结点类型: 索引项的结点类型:
typedef struct { char name[MAXNAME]; /*串名 串名*/ 串名 int length; /*串长 串长*/ 串长 char *stradr; /*起始地址 起始地址*/ 起始地址 } LNode;
北华航天工业学院计算机系 制作
本章内容
4.1 串及其基本运算
4.2 串的存储结构及基本运算
4.3 模式匹配算法
北华航天工业学院计算机系 制作
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺序串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
建立索引项的方法: 建立索引项的方法: 2.带未尾指针的索引表 2.带未尾指针的索引表
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
建立索引项的方法: 建立索引项的方法: 3.带特征位的索引表 3.带特征位的索引表 索引项的结点类型为: 索引项的结点类型为:
typedef struct { char name[MAXNAME]; int tag; /*特征位 特征位*/ 特征位 union /*起始地址或串值 起始地址或串值*/ 起始地址或串值 { char *stradr; char value[4];}uval; ; } TNode;
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储结构
定长顺序存储结构的实现: 用一组地址连 定长顺序存储结构的实现 : 用一 组地址连 续的存储单元存储串值中的字符序列 存储串值中的字符序列。 续的存储单元存储串值中的字符序列。 定长是指按预定义的大小, 定长是指按预定义的大小 , 为每一个串变 量分配一个固定长度的存储区 固定长度的存储区。 量分配一个固定长度的存储区。 通常用数组实现。 通常用数组实现。 用数组实现
北华航天工业学院计算机系 制作
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺序串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
串索引存储: 串索引存储:将所有的串存储在一个大的 存储空间内,为区分每个串, 存储空间内,为区分每个串,给每个串建 立一个索引项,多个索引项组成索引表。 立一个索引项,多个索引项组成索引表。 建立索引项的方法: 建立索引项的方法: 1.带串长度的索引表 1.带串长度的索引表 2.末尾指针的索引表 2.末尾指针的索引表 3.带特征位的索引表 3.带特征位的索引表
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
堆结构
堆空间示意图
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
堆结构类型定义
设堆空间: 设堆空间: char store[SMAX+1]; 自由区指针: 自由区指针:int free; 串的索引项结点类型: 串的索引项结点类型: typedef struct { int length; int stradr; } HString;
北华航天工业学院计算机系 制作
/*串长 串长*/ 串长 /*起始地址 起始地址*/ 起始地址
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺序串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
北华航天工业学院计算机系 制作
4.2.4 基于堆结构的串的基本运算
北华航天工业学院计算机系 制作
本章内容
4.1 串及其基本运算
4.2 串的存储结构及基本运算
4.3 模式匹配算法
2、求子串
StrSub (char *t, char *s, int i, int len)
3、串比较
int StrComp(char *s1, char *s2) 注意:字符串以‘\0’作为结束标志。 注意:字符串以‘ 作为结束标志。 作为结束标志
北华航天工业学院计算机系 制作
4.2.2 定长顺序串的基本运算
串连接 完成的功能: 把串s 完成的功能 : 把串 s1 和 s2 首尾连接成一个 新串s 新串s。 分析: 分析: 判断是否会发生溢出 发生溢出。 ( 1 ) 判断是否会 发生溢出 。 S 的空间是否 足够存储s 的所有元素。 足够存储s1和s2的所有元素。 连接过程: 先将s 的所有元素送到s ( 2 ) 连接过程 : 先将 s1 的所有元素送到 s 再将s 的所有元素送到s 中;再将s2的所有元素送到s中现有元素的后 置结束符。 面;给s置结束符。
北华航天工业学院计算机系 制作
4.2.4 基于堆结构的串的基本运算
int StrCopy(Hstring *s1,Hstring s2) { 串赋值 int i; 算法: 算法: if (free+s2.length-1>SMAX) return 0 ; else { for(i=0; i<s2.length;i++) store[free+i]=store[s2.stradr+i]; s1->length=s2.length; s1->stradr=free; free=free+s2.length; return 1; } }
typedef struct { char name[MAXNAME]; /*串名 串名*/ 串名 char *stradr; char *enadr } ENode;
北华航天工业学院计算机系 制作
/*起始地址 起始地址*/ 起始地址 /*末尾地址 末尾地址*/ 末尾地址
4.2.3 串的堆存储结构
串赋值 完成的功能:将堆store中的一个串s2 复制 中的一个串s 完成的功能 : 将堆 中的一个串 到一个新串s 到一个新串s1中。 分析: 分析: 判断堆中是否有足够空间存储串s (1)判断堆中是否有足够空间存储串s1; 的所有元素送到堆中给s (2)将s2的所有元素送到堆中给s1分配的 空间中; 空间中; 建立新串s 的索引项; (3)建立新串s1的索引项; 修改自由区指针的值。 (4)修改自由区指针的值。
北华航天工业学院计算机系 制作
4.2.2 定长顺序串的基本运算
int串连接 StrConcat1(char s1[ ], char s2[ ], char s[ ]) { int i=0 , j, len1, len2; 算法 len1= StrLength(s1); len2= StrLength(s2) if (len1+ len2>MAXSIZE-1) return 0 ; j=0; while(s1[j]!=’\0’) { s[i]=s1[j]; i++; j++; } j=0; while(s2[j]!=’\0’) { s[i]=s2[j]; i++; j++; } s[i]=’\0’; return 1; }
typedef struct { char data[MAXSIZE]; int curlen; //下标 下标 } SeqString;
例:SeqString s; 串的长度=s.curlen+1
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储
如何标识实际长度? 如何标识实际长度?
用指针指向串最后一个字符。 用指针指向串最后一个字符。
⒈求串长 StrLength(s) ⒉串赋值 StrAssign(s1,s2) ⒊连接操作 StrConcat (s1,s2,s) 或 StrConcat (s1,s2)
⒋求子串 SubStr (s,i,len)
⒌串比较 StrCmp(s1,s2) ⒍子串定位 StrIndex(s,t) ⒎串插入 StrInsert(s,i,t) ⒏串删除 StrDelete(s,i,len) ⒐串替换 StrRep(s,t,r)
数据结构
—— 第4章 串
目标
理解串的定义; 理解串的定义; 理解串的存储方式; 理解串的存储方式; 掌握模式匹配算法。 掌握模式匹配算法。
北华航天工业学院计算机系 制作
本章内容
4.1 串及其基本运算
4.2 串的存储结构及基本运算
4.3 模式匹配算法
北华航天工业学院计算机系 制作
4.1 串及其基本运算
#define MAXSIZE 100 char ch[MAXSIZE]; 如何标识字符串 的实际长度? 的实际长度?
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储
标识实际长度的方法 类似顺序表,用一个指针来指向最后一 1. 类似顺序表,用一个指针来指向最后一 个字符,串描述如下: 个字符,串描述如下:
北华航天工业学院计算机系 制作
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺序串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
相关文档
最新文档