串、数组和广义表结构特点和储存方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
块链存储方式:是一种链式存储结构表示。
4.1.4 串的存储结构
数据结构
串的定长顺序存储表示
这种存储结构又称为串的顺序存储结构。是用一组连续的存储单元来 存放串中的字符序列。所谓定长顺序存储结构,是直接使用定长的字 符数组来定义,数组的上界预先确定。
特点:
串的实际长度可在这个予定义长度的范围内随意设定,超过予定义 长度的串值则被舍去,称之为“截断” 。
串、数组和广义表结构特 点和储存方法
教学目标
数据结构
了解串的存储方法,理解串的两种模式匹配算法,重点掌 握BF算法。
明确数组和广义表这两种数据结构的特点,掌握数组地址 计算方法,了解几种特殊矩阵的压缩存储方法。
掌握广义表的定义、性质及其GetHead和GetTail的操作 。
数据结构
第一节

补充:C语言中常用的串运算
调用标准库函数 #include<string.h>
串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from) 串连接,strcat(char to,char from) 求串长,strlen(char s) ……
数据结构
4.1.1 串的基本概念
4.1.4 串的存储结构
数据结构
串的联接算法中需分三种情况处理:
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断, 则返回TRUE,否则FALSE。 if (S1[0]+S2[0] <= MAXSTRLEN) {// 未截断
数据结构
子串 主串 字符位置 子串位置 串相等 空格串
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 }
⑻ StrDelete (s, i, len):删除,在串s中删除从第i个字符开始 的连续len个字符。
⑼ StrRep (s, t, r):替换,在串s中用串r替换所有与串t相等 的子串。
}ADT String
4.1.2 串的抽象数据类型
数据结构
求子串操作SubStr(s, i, len)示例
i = 3, len = 3
abcdefge
i = 7, len = 4
abcdefge
空串
cde
ge
4.1.3 串与线性表的比较
数据结构
逻辑结构 串的逻辑结构和线性表极为相似,区别仅在于串的数据对 象约束为字符集。
基本操作
在线性表的基本操作中,大多以“单个元素”作为操作 对象;
在串的基本操作中,通常以“串的整体”作为操作对象 。
串(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。 ‘ ’是空格串Φ
T[0] = MAXSTRLEN; uncut = FALSE; } else { // s1截断(仅取S1)
T[1..MAXSTRLEN] = S1[1..MAXSTRLEN];
T[0] = MAXSTRLEN
uncut = FALSE;
4.1.4 串的存储结构
数据结构
串是一种特殊的线性表,其存储表示和线性表类似,但又 不完全相同。串的存储方式取决于将要对串所进行的操作 。串在计算机中有3种表示方式:
定长顺序存储表示:将串定义成字符数组,利用串名可 以直接访问串值。用这种表示方式,串的存储空间在编 译时确定,其大小不能改变。
堆分配存储方式:仍然用一组地址连续的存储单元来依 次存储串中的字符序列,但串的存储空间是在程序运行 时根据串的实际长度动态分配的。
按这种串的表示方法实现的串的运算时,其基本操作为 “字符序 列的复制”。
定长顺序存储结构定义为:
#define MAX_STRLEN 256 typedef struct
{ char str[MAX_STRLEN] ; int length;
} StringType ;
4.1.4 串的存储结构
4.1.2 串的抽象数据类型
数据结构
⑸ StrCmp (s1, s2):串比较,若s1=s2,返回0;若s1<s2, 返 回-1;若s1>s2, 返回1。
⑹ StrIndex (s, t):定位,返回子串t在主串s中首次出现的位 置。若t不是s的子串,则返回0。
⑺ StrInsert (s, i, t):插入,将串t插入到串s中的第i个位置。
基本操作:
⑴ StrLength (s):求串s的长度。
⑵ StrAssign (s1, s2):赋值,将s2的值赋值给串s1。
⑶ StrConcat (s1, s2, s):连接,将串s2放在串s1的后面连接 成一个新串s。
⑷ SubStr (s, i, len):求子串,返回从串s的第i个字符开始取 长为 len 的子串。
Leabharlann Baidu
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]];
数据结构
如何表示串的长度?
方案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
相关文档
最新文档