最新南京邮电大学计算机考研初试题《数据结构》DSB第4章新PPT课件
合集下载
数据结构四PPT课件

pos len
堆分配存储特点:仍用一组连续的存储单元来存放串,
但存储空间是在程序执行过程中动态分配而得。
思路:利用malloc函数合理预设串长空间。
有的语言允许对串常量命名,以使程序易读、易写。 【例】C++中,可定义串常量path
const char path[]="dir/bin/appl";
5
练1:串是由
字符组成的序
列,一般0记个或多个
为 S=’a1a2……an’
练2:现。有以下4个字符串:
a =‘BEI’
b =‘JING’ c = ‘BEIJING’
数据结构课程的内容
第4章 串 (String)
1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式
4.1 串类型的定义
4.2 串的表示和实现 4.3 串的模式匹配算法
4.1 串类型的定义
串即字符串,是由零个或多个字符组成的有限序列,是数据 元素为单个字符的特殊线性表。
记为: s =‘ a1 , a2 , …….. , an’ (n≥0 )
讨论:想存放超长字符串怎么办?——静态数组有缺陷!
改用动态分配的一维数组—— “堆”!
例:用顺序存储方式实现求子串函数SubString(&Sub, S, pos,
len)
将串S中从第pos个字符开始长度为len的字符序列复 制到串Sub中(注:串Sub的预留长度与Ssub, SString S, int pos, int len )
d
= ‘问B:EI①JI他NG们’各自的长度? a =3,b =4,c = 7,d=8
② a是哪个串的子串?在主串中的位置是多少?
《数据结构》课件

查找操作
顺序查找
二分查找
链表查找
在顺序存储结构的线性表中,查找操 作需要从线性表的第一个节点开始, 逐个比较节点的数据域,直到找到目 标数据或遍历完整个线性表。时间复 杂度为O(n)。
在有序的顺序存储结构的线性表中, 查找操作可以采用二分查找算法。每 次比较目标数据与中间节点的数据域 ,如果目标数据大于中间节点,则在 右半部分继续查找;否则在左半部分 查找。时间复杂度为O(log n)。
数据结构是算法的基础。许多算法的实现需要依赖于特定的数据结构, 因此掌握常见的数据结构是编写高效算法的关键。
数据结构在解决实际问题中具有广泛应用。无论是操作系统、数据库系 统、网络通信还是人工智能等领域,数据结构都发挥着重要的作用。
数据结构的分类
根据数据的逻辑关系,数据结构可以分为线性结构和非线 性结构。线性结构如数组、链表、栈和队列等,非线性结 构如树形结构和图形结构等。
04
数据结构操作
插入操作
顺序插入
在顺序存储结构的线性表中,插入操作 需要找到插入位置的前驱节点,修改前 驱节点的指针,使其指向新节点,然后 让新节点指向后继节点。如果线性表的 第一个节点是空节点,则将新节点作为 第一个节点。
VS
链式插入
在链式存储结构的线性表中,插入操作需 要找到插入位置的前驱节点,修改前驱节 点的指针,使其指向新节点。如果线性表 的第一个节点是空节点,则将新节点作为 第一个节点。
图
01
02
03
04
图是一种非线性数据结构,由 节点和边组成,其中节点表示 数据元素,边表示节点之间的
关系。
图具有网络结构,节点之间的 关系可以是任意复杂的,包括
双向、单向、无向等。
数据结构第4章串B教学ppt

严蔚敏、吴伟民编著的经典教材,详细介绍了各 种数据结构及其基本操作,包括串的实现和应用。
《算法导论》
Thomas H. Cormen等编著的经典算法教材,深 入讲解了算法设计和分析的方法,包括串的模式 匹配等算法。
MOOC课程
中国大学MOOC、Coursera等在线教育平台上 提供了大量与数据结构和算法相关的课程,可以 系统地学习相关知识和技能。
压缩串处理技术
针对大规模文本数据,研究压缩串处理技术可以减少存储 空间占用,提高处理效率,是未来发展的重要方向之一。
串的并行处理技术
利用并行计算技术加速串的处理过程,提高处理效率,是 未来研究的热点之一。需要解决并行化算法设计、并行计 算框架选择等问题。
拓展学习资源推荐
1 2 3
《数据结构(C语言版)》
Sunday算法
Sunday算法是一种简单且高效的字符串匹配算法,其核心思 想是当发现不匹配的字符时,直接跳过主串中当前字符之前 的所有字符,将模式串与主串的下一个字符进行比较。
03
串的应用举例
文本编辑中的串操作
01
02
03
字符串匹配
在文本编辑中,经常需要 查找或替换特定的字符串, 这可以通过串的匹配操作 实现。
可以使用数组下标和字 符串截取函数`substr()` 实现串的截取,如`char ch = str[2];`或 `std:string sub = str.substr(2, 4);`。
Python语言实现串的基本操作
串的定义与初始化
在Python中,串使用引号(单引号、双 引号或三引号)进行定义和初始化,如`s = 'hello'`或`s = "hello"`。的比较
《算法导论》
Thomas H. Cormen等编著的经典算法教材,深 入讲解了算法设计和分析的方法,包括串的模式 匹配等算法。
MOOC课程
中国大学MOOC、Coursera等在线教育平台上 提供了大量与数据结构和算法相关的课程,可以 系统地学习相关知识和技能。
压缩串处理技术
针对大规模文本数据,研究压缩串处理技术可以减少存储 空间占用,提高处理效率,是未来发展的重要方向之一。
串的并行处理技术
利用并行计算技术加速串的处理过程,提高处理效率,是 未来研究的热点之一。需要解决并行化算法设计、并行计 算框架选择等问题。
拓展学习资源推荐
1 2 3
《数据结构(C语言版)》
Sunday算法
Sunday算法是一种简单且高效的字符串匹配算法,其核心思 想是当发现不匹配的字符时,直接跳过主串中当前字符之前 的所有字符,将模式串与主串的下一个字符进行比较。
03
串的应用举例
文本编辑中的串操作
01
02
03
字符串匹配
在文本编辑中,经常需要 查找或替换特定的字符串, 这可以通过串的匹配操作 实现。
可以使用数组下标和字 符串截取函数`substr()` 实现串的截取,如`char ch = str[2];`或 `std:string sub = str.substr(2, 4);`。
Python语言实现串的基本操作
串的定义与初始化
在Python中,串使用引号(单引号、双 引号或三引号)进行定义和初始化,如`s = 'hello'`或`s = "hello"`。的比较
数据结构04

2.基本运算在顺序存储结构上的实现
在顺序存储结构中,串的类型定义描述如下:
#define MaxLen <最大串长>; //定义能处理的最大的串长度
typedef struct {
char str[MaxLen];
//定义可容纳MaxLen个字符的字符数组
int curlen;
//定义当前实际串长度
char data[4]; struct node *next; } lstring;
采用链式存储结构(结点大小为1),实现串的联接、求子串
以及串的置换基本运算见教科书 P83 。
2019/8/31
19
4.2.3 串的堆分配存储结构及其基本运算的实现
1.堆分配存储结构
堆存储结构的特点是,仍以一组空间足够大的、地址连续的 存储单元存放串值字符序列,但它们的存储空间是在程序执行过 程中动态分配的。所以也称为动态存储分配的顺序表。每当产生 一个新串时,系统就从剩余空间的起始处为串值分配一个长度和 串值长度相等的存储空间。
typedef struct Chunk {
//结点结构
char str[CHUNKSIZE];
struct Chunk *next;
} Lstring;
一个链串由头指针唯一确定。
这种结构便于进行插入和删除运算,但存储空间利用率太低。
为了提高存储密度,可使每个结点存放多个字符。通常将结
点数据域存放的字符个数定义为结点的大小,显然,当结点大小
}
}
return(0);
}2019/8/31
10
4.2 串的存储结构
串是一种特殊的线性表,其存储结构与线性表的存储结构 类似,只不过组成串的结点是单个字符。串的存储结构表示
南邮系统工程课件第四章

3
1. 数学模型建模程序
含义: 将现实世界中的原型概括形成数学模型的过程。 四个环节:
数 学 模 型 数 学 结 论
现实世 界的分 析、预 测、决 策或控 制
现实 世界 的原 型
翻译Biblioteka 实验分析抽象比较检验
4
(1)变量类型
领域 计量经济 控制理论 类型1
对模型起作用但 是不属于模型描 述范围的因素
模型所研究的 因素 类型2 内生变量 输出变量
试计算公司在第t年的总价值。
31
请用矩阵形式表示状态方程与输出方程。
x1 (t ) : 第t年交换设备的全部价值 x2 (t ) : 第t年电缆的全部价值 y (t ):第t年公司的总价值,y (t ) x1 (t ) x2 (t )
x1 (t 1) 0.8x1 (t ) 0.15x2 (t ) 0.75u(t ) x2 (t 1) x2 (t ) 0.25u(t )
有向图 权重有向图 邻接矩阵 可达矩阵
7
(1)能源需求权重有向图模型
1
-1.8
2
2.6
1.2
0.7
-0.4
1 能源供给 3 能源需求
2 价格 4 人口
3
5.8
4
有向边上数字代表起始节点变化单位值对于相邻 节点的影响 1和2节点之间的权重为-1.8,表示能源供给增加 1个单位,价格下跌1.8个单位
28
29
(2)系统的状态空间描述
系统工程中所涉及的系统分为:连续系统和离 散系统两类。
连续系统的系统方程
X (t ) f ( X (t ), u (t ), t ) Y (t ) g ( X (t ), u (t ), t )
南京邮电大学 数字电路 第四章习题.ppt

1 D4 D5 D7 D6
D1 = D2 = D, D4 = D5 = D6 = D7 = 0
2020年3月25日星期三
第四章 组合逻辑电路习题
节目录
23
相应的电路图如下所示:
EN
C
A0
B
A1
C
A
A2
D
D0
D
D1 D2
7 41 5 1
Y
F
D3
D4
D5
D6 D7
2020年3月25日星期三
第四章 组合逻辑电路习题
2020年3月25日星期三
第四章 组合逻辑电路习题
节目录
32
增加冗余项后,相应逻辑电路中应增加一个与 非门,其与非表达式为:
F (A,B,C,D) = ABC ·ACD ·ABC ·A CD ·BD
2020年3月25日星期三
第四章 组合逻辑电路习题
节目录
33
CD
AB
00 01 11 10
00
1
01
节目录
24
(4) 函数有4个输入变量 ,而74151的地址端只有
3个,即A2 、A1 、A0 ,故须对函数的卡诺图进
行降维,即降为3 维。 BC
CD
A 00 01 11 10 0 DD00
AB 00 01 11 10 00 1 1
1 0 0 D1
01
Ø
11 1 1 1
10 Ø
A1A0 A2 00 01 11 10
组合逻辑电路习题
一、组合逻辑电路的基本概念 二、SSI构成的组合逻辑电路的分析和设计 三、MSI组合逻辑电路的工作原理及应用 四、组合逻辑电路中的竞争和冒险 五、习题讲解
D1 = D2 = D, D4 = D5 = D6 = D7 = 0
2020年3月25日星期三
第四章 组合逻辑电路习题
节目录
23
相应的电路图如下所示:
EN
C
A0
B
A1
C
A
A2
D
D0
D
D1 D2
7 41 5 1
Y
F
D3
D4
D5
D6 D7
2020年3月25日星期三
第四章 组合逻辑电路习题
2020年3月25日星期三
第四章 组合逻辑电路习题
节目录
32
增加冗余项后,相应逻辑电路中应增加一个与 非门,其与非表达式为:
F (A,B,C,D) = ABC ·ACD ·ABC ·A CD ·BD
2020年3月25日星期三
第四章 组合逻辑电路习题
节目录
33
CD
AB
00 01 11 10
00
1
01
节目录
24
(4) 函数有4个输入变量 ,而74151的地址端只有
3个,即A2 、A1 、A0 ,故须对函数的卡诺图进
行降维,即降为3 维。 BC
CD
A 00 01 11 10 0 DD00
AB 00 01 11 10 00 1 1
1 0 0 D1
01
Ø
11 1 1 1
10 Ø
A1A0 A2 00 01 11 10
组合逻辑电路习题
一、组合逻辑电路的基本概念 二、SSI构成的组合逻辑电路的分析和设计 三、MSI组合逻辑电路的工作原理及应用 四、组合逻辑电路中的竞争和冒险 五、习题讲解
数据结构--第四章--课件

串的实际长度可在这个预定义长 度的范围内随意设定,超过予定义 长度的串值则被舍去,称之为“截 断按”这种串的表示方法实现的串的 运算时,其基本操作为 “字符序列 的复制”
例如:串的联接算法中需分三种情况处理:
Status Concat(SString S1, SString S2, SString &T) {
Replace (&S, T, V)
初始条件:串S, T和 V 均已存在, 且 T 是非空串。
操作结果:用 V 替换主串 S 中出 现的所有与(模式串)T 相等的不重叠的子串。
例如: 假设 S = abcaabbcaaabbca , T = bca 若 V = x , 则经置换后得到
数 据 结 构
4.1 串的抽象数据类型的定义 4.2 串的表示和实现
4.1 串的抽象数据类型的定义
• 串:是由零个或多个字符组成的有限序列。 s=′a1a2···an′
• 空串:零个字符的串。 • 长度:串中字符的数目。 • 子串:串中任意个连续的字符组成的子序列。 • 主串:包含子串的串。 • 位置:通常称字符在序列中的序号为
Index (S, T, pos) Replace (&S, T, V)
StrInsert (&S, pos, T)
StrDelete (&S, pos, len) } ADT String
StrEmpty (S)
初始条件:串S存在。 操作结果:若 S 为空串,则返回 true,
否则返回 false。
int curlen; // 串的当前长度 } LString;
实际应用时,可以根据问题所需来 设置结点的大小。
例如: 在编辑系统中,整个文本编辑区 可以看成是一个串,每一行是一个子串, 构成一个结点。即: 同一行的串用定长结构 (80个字符), 行和行之间用指针相联接。
例如:串的联接算法中需分三种情况处理:
Status Concat(SString S1, SString S2, SString &T) {
Replace (&S, T, V)
初始条件:串S, T和 V 均已存在, 且 T 是非空串。
操作结果:用 V 替换主串 S 中出 现的所有与(模式串)T 相等的不重叠的子串。
例如: 假设 S = abcaabbcaaabbca , T = bca 若 V = x , 则经置换后得到
数 据 结 构
4.1 串的抽象数据类型的定义 4.2 串的表示和实现
4.1 串的抽象数据类型的定义
• 串:是由零个或多个字符组成的有限序列。 s=′a1a2···an′
• 空串:零个字符的串。 • 长度:串中字符的数目。 • 子串:串中任意个连续的字符组成的子序列。 • 主串:包含子串的串。 • 位置:通常称字符在序列中的序号为
Index (S, T, pos) Replace (&S, T, V)
StrInsert (&S, pos, T)
StrDelete (&S, pos, len) } ADT String
StrEmpty (S)
初始条件:串S存在。 操作结果:若 S 为空串,则返回 true,
否则返回 false。
int curlen; // 串的当前长度 } LString;
实际应用时,可以根据问题所需来 设置结点的大小。
例如: 在编辑系统中,整个文本编辑区 可以看成是一个串,每一行是一个子串, 构成一个结点。即: 同一行的串用定长结构 (80个字符), 行和行之间用指针相联接。
最新南京邮电大学计算机考研初试题《数据结构》DSB第1章新PPT课件

Loc(ak) = 102 + 2 ×k
15
2. 链接存储 连接存储表示下,为在机内存储一个元素,除了需要存
放该元素本身的信息外,还需要存放于该元素相关的其它元 素的地址信息。这两部分信息组成一个数据元素的结点。
例如,线性结构( a0, a1, a2, a3 )的链接存储表示。
结点存储块分成两部分,元素本身和该元素后继元素所 在结点的存储地址。
17
(6) 更新运算——修改数据结构中某个指定元素的值; (7) 访问运算——访问数据结构中某个元素; (8) 遍历运算——按照某种次序,系统的访问数据结构的各 个元素,使得每个元素加号被访问一次。
如果一个数据结构一旦创建,其结构不放生改变,则 称为静态数据结构,否则成为动态数据结构。
18
1.3 数据抽象和抽象数据类型
起来的。 它主要研究三个方面的内容: 逻辑结构:对数据元素间逻辑关系的描述称为
数据的逻辑结算机内的表示。 运算:在数据结构上执行的运算。
10
1.2.2 数据的逻辑结构
数据结构的逻辑结构可以用一个二元组表示。
即
DS = (D, R)
其中, D是数据元素的有限集合,R是D中数据元 素序偶的集合。
数据类型 1.4 描述数据结构和
算法 1.5 算法分析的基本
方法
8
1. 数据结构举例
表1.1 学生情况表
学号
B02040101 B02040102 B02040103 B02040104
…
姓名
王小红 林悦 陈菁
张可可 …
性别
女 女 女 男 …
其他信息 … … … … …
9
2. 什么是数据结构 数据结构是由数据元素依据某种逻辑联系组织
15
2. 链接存储 连接存储表示下,为在机内存储一个元素,除了需要存
放该元素本身的信息外,还需要存放于该元素相关的其它元 素的地址信息。这两部分信息组成一个数据元素的结点。
例如,线性结构( a0, a1, a2, a3 )的链接存储表示。
结点存储块分成两部分,元素本身和该元素后继元素所 在结点的存储地址。
17
(6) 更新运算——修改数据结构中某个指定元素的值; (7) 访问运算——访问数据结构中某个元素; (8) 遍历运算——按照某种次序,系统的访问数据结构的各 个元素,使得每个元素加号被访问一次。
如果一个数据结构一旦创建,其结构不放生改变,则 称为静态数据结构,否则成为动态数据结构。
18
1.3 数据抽象和抽象数据类型
起来的。 它主要研究三个方面的内容: 逻辑结构:对数据元素间逻辑关系的描述称为
数据的逻辑结算机内的表示。 运算:在数据结构上执行的运算。
10
1.2.2 数据的逻辑结构
数据结构的逻辑结构可以用一个二元组表示。
即
DS = (D, R)
其中, D是数据元素的有限集合,R是D中数据元 素序偶的集合。
数据类型 1.4 描述数据结构和
算法 1.5 算法分析的基本
方法
8
1. 数据结构举例
表1.1 学生情况表
学号
B02040101 B02040102 B02040103 B02040104
…
姓名
王小红 林悦 陈菁
张可可 …
性别
女 女 女 男 …
其他信息 … … … … …
9
2. 什么是数据结构 数据结构是由数据元素依据某种逻辑联系组织
数据结构第4章PPT课件

• (12)StrReplace(S,T,pos,len):串替换操作。当1≤pos≤StrLength(S)且0≤len≤StrLength(S)pos+1时,用串T替换串S中从第pos个字符开始的len个字符。
• (13)StrDestroy(S):串销毁操作。销毁串S。
10
第10页/共33页
4.2 串的存储结构
4.1 串的定义及基本操作
• 串即字符串,计算机处理的对象分为数值数据和非数值数据,字符串是最基本的非数值数据。 • 字符串的应用非常广泛,它是许多软件系统(如字符编辑、情报检索、词法分析、符号处理、自然语言翻译
等系统)的操作对象。 • 在事务处理程序中,顾客的姓名和地址以及货物的名称、产地和规格等一般也是作为字符串处理的。字符
• 线性表的顺序和链式存储结构对于串都是适用的。但任何一种存储结构对于串的不同运 算并非都是十分有效的。
• 对于串的插入和删除操作,顺序存储结构是不方便的,而链式存储结构则显得方便些。 如果访问串中单个字符,对链表来说是不困难的;当要访问一组连续的字符时,用链式 存储结构要比用顺序存储结构麻烦。
11
9
第9页/共33页
串的基本操作
• (10)SubString(Sub,S,pos,len):求子串操作。若存在位置1≤pos≤StrLength(S)且 1≤len≤StrLength(S)-pos+1,则用Sub返回串S的第pos个字符起长度为len的子串。
• (11)StrIndex(S,T):串定位操作。若串S中存在和串T相同的子串,则返回它在串S中第一次出现的位 置;否则返回0。
•
同样存储S="
String Structure",用
紧凑格式一个地址能存四
• (13)StrDestroy(S):串销毁操作。销毁串S。
10
第10页/共33页
4.2 串的存储结构
4.1 串的定义及基本操作
• 串即字符串,计算机处理的对象分为数值数据和非数值数据,字符串是最基本的非数值数据。 • 字符串的应用非常广泛,它是许多软件系统(如字符编辑、情报检索、词法分析、符号处理、自然语言翻译
等系统)的操作对象。 • 在事务处理程序中,顾客的姓名和地址以及货物的名称、产地和规格等一般也是作为字符串处理的。字符
• 线性表的顺序和链式存储结构对于串都是适用的。但任何一种存储结构对于串的不同运 算并非都是十分有效的。
• 对于串的插入和删除操作,顺序存储结构是不方便的,而链式存储结构则显得方便些。 如果访问串中单个字符,对链表来说是不困难的;当要访问一组连续的字符时,用链式 存储结构要比用顺序存储结构麻烦。
11
9
第9页/共33页
串的基本操作
• (10)SubString(Sub,S,pos,len):求子串操作。若存在位置1≤pos≤StrLength(S)且 1≤len≤StrLength(S)-pos+1,则用Sub返回串S的第pos个字符起长度为len的子串。
• (11)StrIndex(S,T):串定位操作。若串S中存在和串T相同的子串,则返回它在串S中第一次出现的位 置;否则返回0。
•
同样存储S="
String Structure",用
紧凑格式一个地址能存四
数据结构第4章串B教学ppt

布置第4章作业:
1.令s=„aaab‟,t=„abcabaa‟,
u=„abcaabbabcabaacbacba‟
试分别求出它们的next函数值和nextval函数值 2.已知主串s=„ADBADABBAABADABBADADA‟, 模式串pat=„ADABBADADA‟, 写出模式串的nextval函数值,并由此画出KMP算法 匹配的全过程
利用演示系统看BF算法执行过程。
4
例2: S=„ababcabcacbab‟,T=„abcac‟,求Index(S,T,5) (参见教材P79)
Int Index(SString S, SString T, int pos) { i=pos; j=1;
i
pos=5
while ( i<=S[0] && j<=T[0] ) {
第一步,先把模式T所有可能的失配点j 所对应的next[j]计算出来; 第二步:执行定位函数Index_kmp (与BF算法模块非常相似) Int Index_KMP(SString S, SString T, int pos) { //见教材P82 i=pos; j=1; while ( i<=S[0] && j<=T[0] ) { if (j==0|| S[i] = = T[j] ) {++i, ++j} //不失配则继续比较后续字符 else {j=next[j];} //特点:S的i指针不回溯,而且从T的k位置开始匹配 } if(j>T[0]) return i-T[0]; //子串结束,说明匹配成功 else return0; }//Index_KMP
17
讨论: next [ j ]是否完美无缺? 前面定义的next函数在某些情况下还是有缺陷的, 例如模式aaaab与主串aaabaaaab匹配时的情况:
1.令s=„aaab‟,t=„abcabaa‟,
u=„abcaabbabcabaacbacba‟
试分别求出它们的next函数值和nextval函数值 2.已知主串s=„ADBADABBAABADABBADADA‟, 模式串pat=„ADABBADADA‟, 写出模式串的nextval函数值,并由此画出KMP算法 匹配的全过程
利用演示系统看BF算法执行过程。
4
例2: S=„ababcabcacbab‟,T=„abcac‟,求Index(S,T,5) (参见教材P79)
Int Index(SString S, SString T, int pos) { i=pos; j=1;
i
pos=5
while ( i<=S[0] && j<=T[0] ) {
第一步,先把模式T所有可能的失配点j 所对应的next[j]计算出来; 第二步:执行定位函数Index_kmp (与BF算法模块非常相似) Int Index_KMP(SString S, SString T, int pos) { //见教材P82 i=pos; j=1; while ( i<=S[0] && j<=T[0] ) { if (j==0|| S[i] = = T[j] ) {++i, ++j} //不失配则继续比较后续字符 else {j=next[j];} //特点:S的i指针不回溯,而且从T的k位置开始匹配 } if(j>T[0]) return i-T[0]; //子串结束,说明匹配成功 else return0; }//Index_KMP
17
讨论: next [ j ]是否完美无缺? 前面定义的next函数在某些情况下还是有缺陷的, 例如模式aaaab与主串aaabaaaab匹配时的情况:
数据结构课件--第四章

HString *s; char *tval;
{int len,i=0;
if (s->ch!=NULL) free(s->ch);
while (tval[i]!='\0') i++;
len=i;
if (len) {s->ch=(char *)malloc(len);
if (s->ch==NULL) return(0); for (i=0;i<len;i++) s->ch[i]=tval[i];
返回主目录
2021/8/5
21
堆串的存储映象示例 a='a program',b='string ',c='process',free=23。
Heap[MAXSIZE]
free=23
a p r o g r a ms t r i n g
pr oc e s s
符号表
符号名 len
a9
b7
c
7
start 0 9 16
2021/8/5
6
(8)StrClear(S)
初始条件: 串S存在
操作结果:将S清为空串 (9)StrCat(S,T)
初始条件: 串S和T存在
操作结果:将串T的值连接在串S的后面
(10)SubString(Sub,S,pos,len)
初 始 条 件 : 串 S 存 在 , 1≤pos≤StrLength(S) 且
for (i=s->len;i<MAXLEN;i++)
s->ch[i]=t.ch[i-s->len];s->len=MAXLEN;flag=0; } else flag=0;// 串s的长度等于MAXLEN ,串t不被连接
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、重载下标操作符
template <class T> T& Array1D<T>::operator[](int i)const {
assert(i>=0 && i<size); return elements[i]; }
第四章 数组和字符串
4.1 数组 4.1.1 数组抽象数据类型 4.1.2 数组的顺序表示 4.1.3 一维数组的C++类
4.1.3 一维数组的C++类 4.2 特殊矩阵
4.3 稀疏矩阵
4.1.3 一维数组的C++类
用C++的模板类定义的一维 数组抽象数据类型。见程序4.1 数组的C++类。这个类的共享成 员函数包括构造函数、析构函数 、下标操作符[]和数组赋值。重 载下标操作符用来返回指向第i个 元素的引用。赋值操作符实现数 组的整体赋值。
elements=new T[size];//重新分配空间
for (int i=0;i<size;i++)
elements[i]=r.elements[i]; //复制元素
}
return *this; }
Array1D <T> a,<T> b;
a=b;
4、重载输入操作符
template <class T> istream &operator>>(istream &in, Array1D<T> &r) {
第四章 数组和字符串
4.1 数组 4.1.1 数组抽象数据类型 4.1.2 数组的顺序表示 4.1.3 一维数组的C++类
4.2 特殊矩阵 4.3 稀疏矩阵 4.4 字符串
程序4.1 一维数组的C++类 #include<assert.h> template <class T> class Array1D {
4.2 特殊矩阵 4.3 稀疏矩阵 4.4 字符串
3、重载赋值操作符
template <class T>
Array1D<T>&Array1D<T>:: operator=(const
Array1D<T> & r)
{
if ( this!=&r ) { //防止自我赋值
size=r.size;
delete[] elements; //释放原空间
下标为0的列 下标为1的列 … 下标为n-1的列 (b)列优先的顺序表示
a[0][0] a[0][1]
a[0][n1]
a[1][0]
a[1][1]
a[1][n1]
a[i][j]
a[m1][0] a[m1][1]
a[m1][n1]
3. 多维数组的顺序表示
推广到多维数组a[m1][m2] …[mn],数组元素a[i1][i2] …[in] 的存储地址为 :
friend istream &operator>>(istream &in, Array1D<T> &r);
friend ostream &operator<<(ostream &out, const Array1D<T> &r); private: int size; T *elements;
};
public: Array1D(int sz=0); //缺省时长度为0
~Array1D(){ delete []elements; } T& operator [](int i)const; //取元素值
Array1D<T>&operator=(const Array1D<T> &r); //整体赋值
1、构造函数
template <class T> Array1D<T>::Array1D(int sz) { //创建动态一维数组
assert(sz>=0); size=sz; elements=new T[sz]; }
在函数的实现中使用了一种断言assert,它 是C++提供的一种功能,若断言语句的条件满足 ,则继续执行后面的语句;否则出错处理,终止 程序执行。assert语句包括在assert.h中。
cout<<"Intput array\n"; for(int i=0; i<r.size; i++) in>>r.elements[i]; return in; }
5、重载输出操作符
template <class T> ostream &operator<<(ostream &out, const Array1D<T> &r) {
cout<<"Array="; for(int i=0; i<r.size; i++) out<<r.elements[i]<<' '; out<<endl; return out; }
南京邮电大学计算机考研 初试题《数据结构》 DSB第4章新
内容提要
1.介绍数组的概念 2.讨论数组抽象数据类型 3.讨论特殊矩阵的存储方法 4.讨论稀疏矩阵的顺序存储方法 5.讨论稀疏矩阵转置算法 6.字符串
行优先顺序的地址计算: 若已知每个数组元素占k个存储单元,第一个数组元素 a[0][0]的存储地址是loc(a[0][0]),则数组元素a[i][ j]的 存储地址loc(a[i][ j])为 loc(a[i][j])=loc(a[0][0])+(i*n+j)*k (0i<m;0j<n)
a[0][0] a[0][1]…a[0][n-1] a[1][0] a[1][1]…a[1][n-1] … a[m-1][0] a[m-1][1]…a[m-1][n-1]
下标为0的行 下标为1的行 … 下标为n-1的行 (a)行优先的顺序表示
a[0][0] a[0][1]
a[0][n1]
a[1][0]
loc(a[i1][i2] …[in])=loc(a[0]…[0])
+ ( i1* m2 * m3 *…* mn
+ i2* m3 * m4 *…* mn
+…
第四章 数组和字符串
+ in-1* mn + in )*k
4.1 数组 4.1.1 数组抽象数据类型 4.1.2 数组的顺序表示
(0ij<mj, 1jn)
a[1][1]
a[1][n1]
a[i][j]
a[m1][0] a[m1][1]
a[m1][n1]
列优先顺序存储: loc(a[i][j])=loc(a[0][0])+(j*m+i)*k (0i<m;0j<n)
a[0][0] a[1][0]…a[m-1][0] a[0][1] a[1][1]…a[m-1][1] … a[0][n-1] a[1][n-1]…a[m-1][n-1]