数据结构第4章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
建立索引项的方法: 建立索引项的方法: 2.带未尾指针的索引表 2.带未尾指针的索引表
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
建立索引项的方法: 建立索引项的方法: 3.带特征位的索引表 3.带特征位的索引表 索引项的结点类型为: 索引项的结点类型为:
typedef struct { char name[MAXNAME]; int tag; /*特征位 特征位*/ 特征位 union /*起始地址或串值 起始地址或串值*/ 起始地址或串值 { char *stradr; char value[4];}uval; ; } TNode;
⒈求串长 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)
串赋值 完成的功能:将堆store中的一个串s2 复制 中的一个串s 完成的功能 : 将堆 中的一个串 到一个新串s 到一个新串s1中。 分析: 分析: 判断堆中是否有足够空间存储串s (1)判断堆中是否有足够空间存储串s1; 的所有元素送到堆中给s (2)将s2的所有元素送到堆中给s1分配的 空间中; 空间中; 建立新串s 的索引项; (3)建立新串s1的索引项; 修改自由区指针的值。 (4)修改自由区指针的值。
#define MAXSIZE 100 char ch[MAXSIZE]; 如何标识字符串 的实际长度? 的实际长度?
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储
标识实际长度的方法 类似顺序表,用一个指针来指向最后一 1. 类似顺序表,用一个指针来指向最后一 个字符,串描述如下: 个字符,串描述如下:
北华航天工业学院计算机系 制作
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺序串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
北华航天工业学院计算机系 制作
4.2.2 定长顺序串的基本运算
1、串连接
StrConcat1(char s1[ ], char s2[ ], char s[ ])
北华航天工业学院计算机系 制作
本章内容
4.1 串及其基本运算
4.2 串的存储结构及基本运算
4.3 模式匹配算法
typedef struct { char data[MAXSIZE]; int curlen; //下标 下标 } SeqString;
例:SeqString s; 串的长度=s.curlen+1
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储
如何标识实际长度? 如何标识实际长度?
用指针指向串最后一个字符。 用指针指向串最后一个字符。
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
建立索引项的方法: 建立索引项的方法: 1.带串长度的索引表 1.带串长度的索引表
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
建立索引项的方法: 建立索引项的方法: 2.带未尾指针的索引表 2.带未尾指针的索引表 索引项的结点类型: 索引项的结点类型:
北华航天工业学院计算机系 制作
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; }
北华航天工业学院计算机系 制作
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; } }
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
堆结构
堆空间: 堆空间:在内存中开辟的能存储足够多的 并且地址连续的存储空间称为堆空间。 串、并且地址连续的存储空间称为堆空间。 堆空间示意图 示意图: 堆空间示意图: 分配空间过程: 分配空间过程: 当产生一个新串时, 当产生一个新串时,要判断堆空间中是 否还有存储空间,若有,则从free free指针开 否还有存储空间,若有,则从free指针开 始划出相应大小的区域为该串的存储区, 始划出相应大小的区域为该串的存储区, 然后建立该串的索引信息,并修改free free指 然后建立该串的索引信息,并修改free指 针。
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储
标识实际长度的方法 2.在串尾存储一个不会在串中出现的特殊 2.在串尾存储一个不会在串中出现的特殊 字符作为终结符,常用’ 字符作为终结符,常用’\0’ 。
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储
标识实际长度的方法 3.在数组的 号单元存储串长度, 在数组的0 3.在数组的0号单元存储串长度,串第一个 字符从数组的1单元开始存放。字符的序号 字符从数组的1单元开始存放。字符的序号 和存储位置将一致。 和存储位置将一致。 例: char s[MAXSIZE+1]; 用s[0]存放串的实际长度 s[0]存放串的实际长度 串值存放在s[1] 串值存放在s[1] ~s[MAXSIZE]
北华航天工业学院计算机系 制作
4.2.3 串的堆存储结构
建立索引项的方法: 建立索引项的方法: 1.带串长度的索引表 1.带串长度的索引表 索引项的结点类型: 索引项的结点类型:
typedef struct { char name[MAXNAME]; /*串名 串名*/ 串名 int length; /*串长 串长*/ 串长 char *stradr; /*起始地址 起始地址*/ 起始地址 } LNode;
2、求子串
StrSub (char *t, char *s, int i, int len)
3、串比较
int StrComp(char *s1, char *s2) 注意:字符串以‘\0’作为结束标志。 注意:字符串以‘ 作为结束标志。 作为结束标志
北华航天工业学院计算机系 制作
4.2.2 定长顺序串的基本运算
北华航天工业学院计算机系 制作
本章内容
4.1 串及其基本运算
4.2 串的存储结构及基本运算
4.3 模式匹配算法
北华航天工业学院计算机系 制作
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺序串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
北华航天工业学院计算机系 制作
/*串长 串长*/ 串长 /*起始地址 起始地址*/ 起始地址
4.2 串的存储结构及基本运算
4.2.1 串的定长顺序存储结构 4.2.2 定长顺Hale Waihona Puke Baidu串的基本运算 4.2.3 串的堆存储结构 4.2.4 基于堆结构的串的基本运算
北华航天工业学院计算机系 制作
4.2.4 基于堆结构的串的基本运算
串连接 完成的功能: 把串s 完成的功能 : 把串 s1 和 s2 首尾连接成一个 新串s 新串s。 分析: 分析: 判断是否会发生溢出 发生溢出。 ( 1 ) 判断是否会 发生溢出 。 S 的空间是否 足够存储s 的所有元素。 足够存储s1和s2的所有元素。 连接过程: 先将s 的所有元素送到s ( 2 ) 连接过程 : 先将 s1 的所有元素送到 s 再将s 的所有元素送到s 中;再将s2的所有元素送到s中现有元素的后 置结束符。 面;给s置结束符。
北华航天工业学院计算机系 制作
4.2.1 串的定长顺序存储结构
定长顺序存储结构的实现: 用一组地址连 定长顺序存储结构的实现 : 用一 组地址连 续的存储单元存储串值中的字符序列 存储串值中的字符序列。 续的存储单元存储串值中的字符序列。 定长是指按预定义的大小, 定长是指按预定义的大小 , 为每一个串变 量分配一个固定长度的存储区 固定长度的存储区。 量分配一个固定长度的存储区。 通常用数组实现。 通常用数组实现。 用数组实现
typedef struct { char name[MAXNAME]; /*串名 串名*/ 串名 char *stradr; char *enadr } ENode;
北华航天工业学院计算机系 制作
/*起始地址 起始地址*/ 起始地址 /*末尾地址 末尾地址*/ 末尾地址
4.2.3 串的堆存储结构
数据结构
—— 第4章 串
目标
理解串的定义; 理解串的定义; 理解串的存储方式; 理解串的存储方式; 掌握模式匹配算法。 掌握模式匹配算法。
北华航天工业学院计算机系 制作
本章内容
4.1 串及其基本运算
4.2 串的存储结构及基本运算
4.3 模式匹配算法
北华航天工业学院计算机系 制作
4.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 基于堆结构的串的基本运算
总结: 总结: 以上堆空间和算法是由算法编写者自己 设计和编写来实现的,在这里, 设计和编写来实现的,在这里,重点介绍这 种存储的处理思想, 种存储的处理思想,很多问题及细节尚未涉 如废弃串的回收、自由区的管理等。 及,如废弃串的回收、自由区的管理等。 在常用的高级语言及开发环境中, 在常用的高级语言及开发环境中,大多 数系统本身都提供了串类型及大量的库函数 提供了串类型及大量的库函数, 数系统本身都提供了串类型及大量的库函数, 用户可直接使用。 用户可直接使用。
什么是串? 什么是串? 串(String)是零个或多个字符组成的 (String)是零个或多个字符组成的 有限序列。 有限序列。一般记作 S=“a1a2a3…an”。 相关术语 串名 子串 串值 主串 串长 空串 空格串 串相等 子串的位置
北华航天工业学院计算机系 制作
4.1 串及其基本运算
串的基本运算: 串的基本运算:
相关文档
最新文档