数据结构第4章 串2—第5章 数组和广义表 ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.5 广义表的存储结构
ppt课件
16
数组和广义表的特点:一种特殊的线性表 ① 元素的值并非原子类型,可以再分解,表
中元素也是一个线性表(即广义的线性 表)。 ② 所有数据元素仍属同一数据类型。
ppt课件
17
5.1 数组的定义
特点: 串的实际长度可在这个定长的范围内随意设定; 实现串的运算时,基本操作为字符序列的复制
ppt课件
8
二、堆分配存储表示
用一组地址连续的存储单元存储串值的字符序列, 但存储空间是在程序执行过程中动态分配而来。
这种存储结构中,基本操作和定长表示相同,仍然 是基于“字符序列的复制”。
在堆存储分配中无须考虑“截断”问题。
strcat(str1, str2)
// 串联接函数;
strcpy(str1, str2, k)
// 串复制函数;
strcmp(str1, str2)
// 串比较函数;
strlen(str)
// 求串长函数;
ppt课件
6
4.2 串的表示和实现
一、定长顺序存储表示
用一组地址连续、长度固定的存储单元存储串值的字 符序列。 当串的实际长度大于存储区的长度时,超过部分的串 值则被舍去,称为“截断”。
第四章 串
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法
ppt课件
1
4.1 串类型的定义
一、串的基本概念
1.串即字符串,是由零个或多个字符组成的有限序列,
是数据元素为单个字符的特殊线性表。
记为:s =‘a1a2…an’
(n≥0 )
串名 串值
(用‘ ’ 括 起来)
C++中隐含结 束符‘\0’ , 即ASCII码
StrCopy ( &T, S ) DestroyString ( &S )
SubString ( &Sub, S, pos, len ) Replace ( &S, T, V )
StrEmpty ( S )
StrInsert ( &S, pos, T )
StrCompare ( S, T )
StrDelete ( &S, pos, len )
块链的构造也成为算法设计中费神的问题:结点的大
小究竟为多少才合适?
实际应用时,可以根据问题所需来设置结点的大小。
例如,在编辑系统中,整个文本编辑区可以看成是一
个串,每一行是一个子串,构成一个结点。即: 同一行
的串用定长结构, 行和行之间用指针相联接。
ppt课件
15
第五章 数组和广义表
5.1 数组的类型定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.4 广义表的类型定义
在堆分配的存储表示中,存储空间的管理成为算法
实现所关心的重要问题,特别是对于新分配空间的大
小的计算和存储空间的释放。
ppt课件
9
串的堆分配存储结构的C语言描述
typedef struct { char *ch; // 若是非空串,则按串长分配存储区, // 否则不分派存储区,ch为NULL int length; // 串长度
先为新生成的串分配一个存储空间,然后进行串值的
复制。
ppt课件
11
三、块链存储表示
用链表存储串,通常一个结点中存放的不是一个字符, 而是一个子串。每个结点分配定长的存储空间(块),最 后一个结点可能未满,通常用 ‘#’ 进行填充。
存储密度 =
数据元素所占存储位 实际分配的存储位
设立头指针和尾指针,并给出串的长度,这种结构称 为“块链结构”。
串长的标识方法:
方法1:用下标为0的分量存放串长; √
方法2:在串值后面加入结束标记符(‘\0’)。 (C/C++语言)
ppt课件
7
串的定长顺序存储结构的C语言描述
#define MAXSTRLEN 255 // 串的“定长” typedef unsigned char Sstring[MAXSTRLEN + 1]; // Sstring[0] 存放串的长度
} HString;
ppt课件
10
通常,C语言中提供的串类型就是以这种存储方式实 现的。
系统利用函数malloc( ) 和 free( ) 进行串值空间的动态 管理,为每一个新产生的串分配一个存储区,称串值 共享的存储空间为“堆”。
C语言中的串以一个空字符为结束符,串长是一个隐 含值。
这类串操作实现的算法为:
// 串的链表结构
Chunk *head, *tail; // 串的头和尾指针
int curlen;
// 串的当前长度
} LString;
ppt课件
14
块链结构的缺点:
由于串的应用需要经常对字符或者子串进行随机访问,
链表的结构明显不适合这种应用。
另外,对于跨越多个结点的子串的操作,链表的操作
就不ห้องสมุดไป่ตู้顺序结构灵活。
NUL
ppt课件
2
串与线性表
串的逻辑结构和线性表极为相似,区别仅在于串 的数据对象约束为字符集。 串的基本操作和线性表有很大差别。
在线性表的基本操作中,大多以“单个元素” 作为操作对象; 在串的基本操作中,通常以“串的整体”作为 操作对象。
ppt课件
3
基本操作: StrAssign ( &T, chars ) Concat ( &T, S1, S2 )
StrLength ( S )
ClearString ( &S )
Index ( S, T, pos )
ppt课件
4
串的基本操作示例:
ppt课件
5
C 语言字符串函数库中提供下列串处理函数: 头文件:# include <string.h>
gets(str)
// 输入一个串;
puts(str)
// 输出一个串;
结构.
ppt课件
13
块链存储结构的C语言描述
#define CHUNKSIZE 80 // 可由用户定义的块大小 typedef struct Chunk { // 结点结构 char ch[CUNKSIZE]; struct Chunk *next; } Chunk;
typedef struct {
ppt课件
12
法1:链表结点(数据域)大小取1
head
A
B
C
I NULL
法2:链表结点(数据域)大小取n(例如n=4)
head A B C D
E F G H
I # # # NULL
讨论:法1存储密度为 1/2 ; 法2存储密度为9/15=3/5;
显然,若数据元素很多,用法2存储更优—称为块链
相关文档
最新文档