数据结构课件第五章

合集下载

《刘大有数据结构》 chapter 5 数组字符串和集合类

《刘大有数据结构》 chapter 5 数组字符串和集合类
Loc(A[i][j])= Loc(A[0][0])+ i *n*C + j*C = Loc(A[0][0])+(i * n + j) *C
再例如三维数组 再例如三维数组D[3][3][4],可以把它看作一维 , 数组 B1[3] = { D[0][3][4],D[1][3][4],D[2][3][4] } , ,
下面我们给出一个 下面我们给出一个Array类的应用例子 类的应用例子. 类的应用例子 例5.1 编写一个函数,要求输入一个整数 , 编写一个函数,要求输入一个整数N, 用动态数组A来存放 来存放2~ 之间所有 之间所有5或 的倍数 的倍数, 用动态数组 来存放 ~N之间所有 或7的倍数, 输出该数组. 输出该数组 说明 : 因为 由用户给出 , 编写程序时无法知 说明:因为N由用户给出 由用户给出, 道需要多大的数组来存放数据, 道需要多大的数组来存放数据,因此采用动态 数组(初始时大小为10) 数组(初始时大小为 ),每当数组满时就调 整数组大小,给它增加10个元素 个元素. 整数组大小,给它增加 个元素
数组在内存中一般是以顺序方式存储的 数组在内存中一般是以顺序方式存储的. 设一维数组 设一维数组A[n]存放在 个连续的存储单元中 , 存放在n个连续的存储单元中 存放在 个连续的存储单元中, 每个数组元素占一个存储单元(不妨设为C个 每个数组元素占一个存储单元 ( 不妨设为 个 连续字节) 如果数组元素A[0]的首地址是 , 的首地址是L, 连续字节). 如果数组元素 的首地址是 则 A[1] 的 首 地 址 是 L+C , A[2] 的 首 地 址 是 L+2C,… …,依次类推,对于 0 ≤ i ≤ n 1 有: , ,依次类推,
B[i]={ A[i][0],A[i][1],…,A[i][n-2],A[i][n-1] } -

数据结构课件第5章-PPT文档资料

数据结构课件第5章-PPT文档资料
(a) 非紧缩方式; (b) 紧缩方式
第5章 串
5.2.2
和线性表的链式存储结构相类似,串的存储结构也可采用链 式存储结构,即用线性链表来存储串值。在这种存储结构下,存 储空间被分成一系列大小相同的结点,每个结点用data域存放字 符, link域存放指向下一个结点的指针。 这样, 一个串就可以用 一个线性链表来表示。
private { private declaration }
public { public declaration }
end;
第5章 串
这一段程序可看作一个字符串:“type private
Tstring = class
{private declaration } public {public declaration } end;
”, 其中“ ”表示换行符。Delphi的源程序编辑器提供了字符 串的查找与替换功能。 选择“Search”菜单中的“Replace”项, 在对话框中输入要查找字符串‘private’及替代串‘protected’, 如 图 5.1 所 示 , 则 执 行 命 令 后 以 上 程 序 中 的 关 键 字 ‘ private’ 被 ‘protected’替代。
第5章 串 串中任意个连续的字符组成的子序列称为该串的子串。包含 子串的串称为主串。通常称字符在序列中的序号为该字符在串中 的位置。子串在主串中的位置可以用子串的第一个字符在主串中 的位置来表示。
例如, 假设a、 b、 c、 d为如下的四个串:
a =‘Data’
b =‘Structure’
c =‘Data Structure’ d =‘Data Structure’
const maxlen = 允许的串最大长度;

数据结构——第五章查找:01静态查找表和动态查找表

数据结构——第五章查找:01静态查找表和动态查找表

数据结构——第五章查找:01静态查找表和动态查找表1.查找表可分为两类:(1)静态查找表:仅做查询和检索操作的查找表。

(2)动态查找表:在查询之后,还需要将查询结果为不在查找表中的数据元素插⼊到查找表中;或者,从查找表中删除其查询结果为在查找表中的数据元素。

2.查找的⽅法取决于查找表的结构:由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。

为了提⾼查找效率,需要在查找表中的元素之间⼈为地附加某种确定的关系,⽤另外⼀种结构来表⽰查找表。

3.顺序查找表:以顺序表或线性链表表⽰静态查找表,假设数组0号单元留空。

算法如下:int location(SqList L, ElemType &elem){ i = 1; p = L.elem; while (i <= L.length && *(p++)!= e) { i++; } if (i <= L.length) { return i; } else { return 0; }}此算法每次循环都要判断数组下标是否越界,改进⽅法:加⼊哨兵,将⽬标值赋给数组下标为0的元素,并从后向前查找。

改进后算法如下:int Search_Seq(SSTable ST, KeyType kval) //在顺序表ST中顺序查找其关键字等于key的数据元素。

若找到,则函数值为该元素在表中的位置,否则为0。

{ ST.elem[0].key = kval; //设置哨兵 for (i = ST.length; ST.elem[i].key != kval; i--) //从后往前找,找不到则返回0 { } return 0;}4.顺序表查找的平均查找长度为:(n+1)/2。

5.上述顺序查找表的查找算法简单,但平均查找长度较⼤,不适⽤于表长较⼤的查找表。

若以有序表表⽰静态查找表,则查找过程可以基于折半进⾏。

算法如下:int Search_Bin(SSTable ST, KeyType kval){ low = 1; high = ST.length; //置区间初值 while (low <= high) { mid = (low + high) / 2; if (kval == ST.elem[mid].key) { return mid; //找到待查元素 } else if (kval < ST.elem[mid].key) { high = mid - 1; //继续在前半区间查找 } else { low = mid + 1; //继续在后半区间查找 } } return 0; //顺序表中不存在待查元素} //表长为n的折半查找的判定树的深度和含有n个结点的完全⼆叉树的深度相同6.⼏种查找表的时间复杂度:(1)从查找性能看,最好情况能达到O(logn),此时要求表有序;(2)从插⼊和删除性能看,最好情况能达到O(1),此时要求存储结构是链表。

数据结构课件PPT数组和广义表

数据结构课件PPT数组和广义表
T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if (T.tu)
{ q=1; for (col=1;col<=T.mu;++col) for(p=1;p<=M.tu;++p) if ( M.data[p].j==col ) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } }
(row) (col) (value)
[0] 1 4 22
[0] 1 5 91
[1] 1 7 15
[1] 2 2 11
[2] 2 2 11
[2] 3 6 28
[3] 2 [4] 3来自6 17 4 -6[3] 4 [4] 4
1 22 3 -6
[5] 4 6 39
[5] 6 2 17
[6] 5 1 91
[6] 6 4 39
cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1]
稀疏矩阵的快速转置(算法5.2)
Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T) { T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;
if (T.tu) { for (col=1;col<=M.nu;++col) num[col]=0; for (t=1;t<=M.tu;++t) ++num[M.data[t].j]; cpot[1]=1; for ( col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for (p=1;p<=M.Tu;++p) { col=M.data[p].j; q=cpot[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++cpot[col]; } }

数据结构C++版第5章 树和二叉树 ppt课件

数据结构C++版第5章 树和二叉树 ppt课件

A
B
C
D
E
A
DEF G
GBF C
16
5.1 树的逻辑结构
树结构和线性结构的比较
线性结构
树结构
第一个数据元素
根结点(只有一个)
无前驱
无双亲
最后一个数据元素 无后继
叶子结点(可以有多个) 无孩子
其它数据元素
其它结点
一个前驱,一个后继
一对一
一个双亲,多个孩子
一对多
17
5.1 树的逻辑结构
树的遍历操作
树的遍历:从根结点出发,按照某种次序访问树中所有结点 ,使得每个结点被访问一次且仅被访问一次。 Nhomakorabea……
……
6
5.1 树的逻辑结构
树的基本术语
结点的度:结点所拥有的子树的个数。 树的度:树中各结点度的最大值。
A
BC
D
E F GH I J
KL
M
7
5.1 树的逻辑结构
树的基本术语
叶子结点:度为0的结点,也称为终端结点。 分支结点:度不为0的结点,也称为非终端结点。
A
BC
D
E F GH I J
KL
M
下标 data 0A
B
C
1B 2C
3D
DEF G H
第 5 章 树和二叉树
本章的主要内容是
➢树的逻辑结构 ➢树的存储结构 ➢二叉树的逻辑结构 ➢二叉树的存储结构及实现 ➢树、森林与二叉树的转换
1
5.1 树的逻辑结构
树的定义
树:n(n≥0)个结点的有限集合。 当n=0时,称为空树; 任意一棵非空树满足以下条件: ⑴ 有且仅有一个特定的称为根的结点; ⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互 不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树, 并称为这个根结点的子树。

数据结构 Chapter5

数据结构  Chapter5

1
2
3
45 67
8 9 10
Department of Computer Science & Technology, Nanjing University
fall
DATA STRUCTURES
(4)若结点编号i为奇数,且i!=1,则它的左兄 弟为结点i-1。
(5)若结点编号i为偶数,且i!=n,则它的右兄 弟为结点i+1。
Tree ( ); ~Tree ( ); position Root ( ); BuildRoot ( const Type& value ); position FirstChild ( position p ); position NextSibling ( position p ); position Parent ( position p ); Type GetData ( position p );
DATA STRUCTURES
fall
5.2 二叉树 (Binary Tree) 二叉树的定义
DATA STRUCTURES
一棵二叉树是结点的一个有限集合,该 集合或者为空,或者是由一个根结点加 上两棵分别称为左子树和右子树的、互 不相交的二叉树组成。
Department of Computer Science & Technology, Nanjing University
fall
DATA STRUCTURES
定义1 满二叉树 (Full Binary Tree)
如果二叉树中所有分支结点的度数都为2, 且叶子结点都在同一层次上,则称这类二 叉树为满二叉树。
定义2 完全二叉树 (Complete Binary Tree)

数据结构讲义第5章-数组和广义表

数据结构讲义第5章-数组和广义表
对于一个矩阵结构,显然用一个二维数组来表示是非常 恰当的.但有时会遇到这样一类矩阵:在这种矩阵中有 许多值相同的元素或者是零元素,为了节省存储空间, 可以对这类矩阵进行压缩存储. 压缩存储是:为多个值相同的元素只分配一个存储空间: 对零元素不分配存储空间. 特殊矩阵:值相同的元素或者零元素在矩阵中的分布有 一定规律,则称此类矩阵为特殊矩阵,反之,称为稀疏 矩阵.
5.4 广义表
5)若广义表不空,则可分成表头和表尾,反之,一对表头和表尾 可唯一确定广义表 对非空广义表:称第一个元素为L的表头,其余元素组成的表称 为LS的表尾; B = (a,(b,c,d)) 表头:a 表尾 ((b,c,d)) 即 HEAD(B)=a, C = (e) D = (A,B,C,f ) 表头:e 表尾 ( ) TAIL(B)=((b,c,d)),
5.4 广义表
4)下面是一些广义表的例子; A = ( ) 空表,表长为0; B = (a,(b,c,d)) B的表长为2,两个元素分别为 a 和子表(b,c,d); C = (e) C中只有一个元素e,表长为1; D = (A,B,C,f ) D 的表长为4,它的前三个元素 A B C 广义表, 4 A,B,C , 第四个是单元素; E=( a ,E ) 递归表.
以二维数组为例:二维数组中的每个元素都受两个线性关 系的约束即行关系和列关系,在每个关系中,每个元素aij 都有且仅有一个直接前趋,都有且仅有一个直接后继. 在行关系中 aij直接前趋是 aij直接后继是 在列关系中 aij直接前趋是 aij直接后继是
a00 a01 a10 a11
a0 n-1 a1 n-1
a11 a21 ┇ a12 a22 ┇ ai2 ┇ … amj … amn … aij … ain … … a1j a2j … … a1n a2n β1 β2 ┇ βi ┇ βm

【2019年整理】数据结构课件第5章

【2019年整理】数据结构课件第5章

if (pos >maxlen) or (pos < 1) or (s.curlen = maxlen) then showmessage(’error’)
else begin {若插入位置超出串s的长度, } if pos > s.curlen then pos:= s.curlen; {则将其调整至串s的末尾} if s.curlen+t.curlen<maxlen then len:= s.curlen+t.curlen else len:=maxlen; {计算新串长}
为串的长度。 零个字符的串称为空串(null string),长度为零。
第5章 串
串中任意个连续的字符组成的子序列称为该串的子串。包含
子串的串称为主串。通常称字符在序列中的序号为该字符在串中 的位置。子串在主串中的位置可以用子串的第一个字符在主串中 的位置来表示。 例如, 假设a、 b、 c、 d为如下的四个串: a =‘Data’ c =‘Data Structure’ b =‘Structure’ d =‘Data Structure’
一个线性链表来表示。
由于串结构的特殊性,在串的链表结构中常常涉及到结点的
大小问题,即如何确定结点的data域存放字符的个数问题。 通常
情况下,结点的大小为4或1,如图5.3所示。当结点的大小为4时, 串所占用的结点中最后一个结点的 data域不一定全被串值占满,
这时通常补上“#”或其他的非串值字符。
第5章 串
第5章 串
5.1 串的应用实例及概念
5.2 串的存储结构 5.3 串的基本操作 5.4 串的ADT定义及类定义 5.5 实习五:串的演示程序
第5章 串
5.1 串的应用实例及概念
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
第五章 数组和广义表
数组和广义表可看成是一种特殊的线性表, 数组和广义表可看成是一种特殊的线性表, 其特殊在于, 其特殊在于,表中的数据元素本身也是一种线 性表。 性表。
• 5.1 数组的定义 • 5.2 数组的顺序表示和实现 • 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 5.3.2 稀疏矩阵
m1 m2
mn
m*n-1 m*n-1
a11 a21 12 ……. am1 1n a12 21 a22 …….. am2 2n ………. a1n m1 a2n m2 …….. amn
数据结构
5.2 数组的表示与实现
按行优先存储的寻址
l2 l1
aij
本行中a 本行中 ij前面的元素个数 每行元素个数 整 行 数
c al
Loc(al)
al+1
……
ai-1
ai
……
ah
Loc(ai)
14
数据结构
5.2 数组的表示与实现
数组的存储结构与寻址——二维数组 二维数组 数组的存储结构与寻址
二维数组 二维结构 内 存 一维结构
常用的映射方法有两种: 常用的映射方法有两种: 优先:先行后列,先存储行号较小的元素, 按行优先:先行后列,先存储行号较小的元素, 行号相同者先存储列号较小的元素。 行号相同者先存储列号较小的元素。 优先:先列后行,先存储列号较小的元素, 按列优先:先列后行,先存储列号较小的元素, 列号相同者先存储行号较小的元素。 列号相同者先存储行号较小的元素。
数组应该采用何种方式存储? 数组应该采用何种方式存储?
数组没有插入和删除操作,所以,不用预留空间, 数组没有插入和删除操作,所以,不用预留空间, 适合采用顺序存储。 适合采用顺序存储。
13
数据结构
5.2 数组的表示与实现
数组的存储结构与寻址——一维数组 一维数组 数组的存储结构与寻址
设一维数组的下标的范围为闭区间[ , ] 设一维数组的下标的范围为闭区间 [ l,h], 每个 个存储单元, 任一元素 数组元素占用 c 个存储单元 , 则 其 任一元 素 ai 的 存储地址可由下式确定: 存储地址可由下式确定: Loc(a )=Loc(a )+(i- )× Loc( i)=Loc( l)+( -l)×c
Loc(aijk ) = Loc(a000) +( i×m2×m3 + j×m3 + k )×c × × × Loc(j1,j2,…,jn ) = Loc(0,0,…,0) +( j1×m2×…×mn × + j2×m3×…×mn × +… + jn )×c ×
19
数据结构
5.3 矩阵的压缩存储
特殊矩阵和稀疏矩阵
数据结构
二维数组的逻辑结构的定义 2-array = ( D , R ) 其中 D={ aij | i= c1,c1+1…d1, j=c2,c2+1…d2,aij∈D} R={ row , col }
row={< aij, aij+1 >| c1≤i ≤d1, c2≤j≤d2-1, aij,aij+1 ∈D} col={< aij, ai+1j >| c1≤i ≤d1-1, c2≤j≤d2, aij, ai+1j ∈D}
特殊矩阵:矩阵中很多值相同的元素并且它们的分布 特殊矩阵: 有一定的规律。 有一定的规律。 稀疏矩阵:矩阵中有很多零元素或值相同的元素,其 稀疏矩阵:矩阵中有很多零元素或值相同的元素, 分布没有规律。 分布没有规律。 压缩存储的基本思想是: 压缩存储的基本思想是: 为多个值相同的元素只分配一个存储空间; 相同的元素只分配一个存储空间 ⑴ 为多个值相同的元素只分配一个存储空间; 元素不分配存储空间。 不分配存储空间 ⑵ 对零元素不分配存储空间。
数据结构
基本操作: 基本操作: InitArray(&A, n, bound1, … , boundn) //若维数 和各维长度合法,则构造相应数组 ,并 若维数n和各维长度合法 若维数 和各维长度合法,则构造相应数组A, 返回ok; 返回 ; DestroyArray(&A) //销毁数组 ; 销毁数组A; 销毁数组 Value(A, &e, index1, … , indexn) //indexi表示第 个下标值, 若各下标不出界,则将 表示第i个下标值 表示第 个下标值, 若各下标不出界, e赋值为对应元素 赋值为对应元素 Assign(&A, e, index1, … , indexn) //indexi表示第 个下标值, 若各下标不出界,则将 表示第i个下标值 表示第 个下标值, 若各下标不出界, e赋值给对应元素 赋值给对应元素
x a11 a21 … am1 a12 a22 … am2 … … … … a1n a2n … amn a11 a21 … am1 a12 a22 … am2 … … … … a1n a2n … amn
12
A=
A=
数据结构
5.1 数组的定义
数组的基本操作
存取:给定一组下标,读出对应的数组元素; ⑴ 存取:给定一组下标,读出对应的数组元素; 修改:给定一组下标, ⑵ 修改:给定一组下标,存储或修改与其相对应的 数组元素。 数组元素。 存取和修改操作本质上只对应一种操作——寻址 寻址 存取和修改操作本质上只对应一种操作
1
数据结构
5.1 数组的定义
数组的定义
数组是由一组类型相同的数据元素构成的有序 数组是由一组类型相同的数据元素构成的有序 类型相同的数据元素构成的 集合,每个数据元素称为一个数组元素( 集合,每个数据元素称为一个数组元素(简称为元 ),每个元素受 每个元素受n(n≥ 个线性关系的约束 的约束, 素),每个元素受 ≥1)个线性关系的约束,每个 元素在n个线性关系中的序号 1、i2、…、in称为该元 元素在 个线性关系中的序号i 、 个线性关系中的序号 素的下标, 维数组。 素的下标,并称该数组为 n 维数组。
按列优先存储的寻址方法与此类似。 按列优先存储的寻址方法与此类似。
18
数据结构
5.2 数组的表示与实现
数组的存储结构与寻址——多维数组 多维数组 数组的存储结构与寻址
n(n>2)维 ( > ) 数组一般也采用 按行优先和按列 优先两种存储方 法。请自行推导 任一元素存储地 址的计算方法。 址的计算方法。
数据结构
n维数组的逻辑结构的定义 维数组的逻辑结构的定义
n-array = ( D , R )
其中 D={ aj1j2…jn | ji= ci,ci+1…di, i=1,2…n, aj1j2…jn ∈D} R={ R1 , R2…Rn } Ri={< aj1j2…ji……jn, aj1j2…ji+1……jn >| ck≤jk ≤dk, ci≤ji≤di-1, aj1j2…ji……jn, aj1j2…ji+1……jn ∈D}
数据结构
二维数组的逻辑结构的定义
a11 a 21 a 31 M a m1
a12 a 22 a 32 M am2
a13 a 23 a 33 M a m3
L a1n L a 2n L a 3n M M L a mn
数据结构
二维数组的定义
a11 a 21 a 31 M a m1 a12 a 22 a 32 M am2 a13 a 23 a 33 M a m3 L L L M L a1n a2n a 3n M a mn
2-array = ( D , R )
其中
D={ aij | i= c1,c1+1…d1, j=c2,c2+1…d2, aij∈D} R={ row , col }
row={< aij, aij+1 >| c1≤i≤d1, c2≤j≤d2-1, aij,aij+1∈D} col={< aij, ai+1j >| c1≤i ≤d1-1, c2≤j≤d2, aij, ai+1j∈D}

al1l2

al1h2 a(l1+1)l2
a(l1+1)h2
……
aij

ah 1 h 2
Loc(al1l2) (
(i -l1)×(h2 -l2+1)+(j -l2)个元素 )
Loc(aij) (
Loc(aij)=Loc(al1l2)+((i-l1)×(h2-l2+1)+(j-l2))×c = + - × - + + - ×
可以看到 • 共有 1- c1+1)(d2- c2+1)个元素 共有(d 个元素 • 对于每个aij,都受两个关系 都受两个关系row 和 col 的约束。 的约束。 • 在同一行中, aij+1 是 aij 的直接后继 在同一行中, • 在同一列中, ai+1j 是 aij 的直接后继 在同一列中, • 所有数组元素都同属于同一数据类型 所有数组元素都同属于同一数据类型
α1 α2 α3 α4 α5 α3 α4 α5 )
行向量的一维数组A=(α1 α2
二维数组是数据元素为线性表的线性表。 二维数组是数据元素为线性表的线性表。
数据结构
5.1 数组的定义
数组的基本操作
在数组中插入(或删除)一个元素有意义吗? 在数组中插入(或删除)一个元素有意义吗?
将元素 x 插入 到数组中第1行第 行第2列 到数组中第 行第 列。 删除数组中 行第2列元素 第1行第 列元素。 行第 列元素。
数据结构
可以看到n维数组 可以看到 维数组
1. 共有 ∏ ( d i
i =1 n
− c i + 1)
个元素
相关文档
最新文档