数据结构课件第5章数组和广义表
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B=(β1β2β3 … , βm) βi = ( ai 1 , ai 2 , … , ai, n )
Am×n = ( ( a11 a12 … a1, n ) ,
1≤i ≤m
( a21 a22 … a2, n ) , … , …, ( am, 1am, 2… am, n ) )
6
数组一旦被定义,它的维数和维界就 不再改变。因此,除了结构的初始化和销 毁之外,数组只有存取数据元素和修改数 据元素值的操作。
储,则二维数组 A 中任一元素 aij 的存储位置可以由下面定位公式 确定
LOC (A[i],[ j]) = LOC (A[1], [1]) + n*(i-1)+(j-1) 其中:
5.1.2 数组的抽象类型定义
ADT Array { D={aj1j2j3…..jn|n>0, 称 为 数 组 的 维 数 , ji 是 数 组 的 第 i 维 下
标,1≤ ji ≤bi, bi为数组第i维的长度, aj1j2j3…..jn∈ElementSet} 数据关系:R ={R1,R2, …….Rn}
顺序存储的定位公式 数组的顺序存储表示 基本操作的算法描述
5.2.1 顺序存储的定位公式 10
用顺序存储结构来存储数组中的元素,一定要按照 某种次序将元素排成一个线性序列。有两种存储方式:
(1) 以列为主序 ( column major order ) 的存储方式, 即按列优先,逐列顺序存储。
(2) 以行为主序 ( row major order ) 的存储方式,即 按行优先,逐行顺序存储。
12
a11
(1)
A1
a12
…
(1)
a11,.nn
LO(AC 2 )LO(a2 C1 )
a21
(1)
A2
a22
…
a2, n
(1)
LO(AC m)LO(aC m,1)
(1)
Am
行主次序存放
…
am, 1 am, 2
……
amm,, nn
13
对于数组,一旦规定了它 的维数和各维的长度,便可以 为它分配存储空间。反之,只 要给出一组下标,便可以求得 相应数组的存储位置。
Biblioteka Baidu
(1)
LO(AC 1 )LO(a1 C 1 )
11
a11
(1)
A1
a21
…
(1)
aAmm, ,1
LO(AC 2 )LO(a1 C 2 )
a12
(1)
A2
a22
…
am, 2
(1)
LO(A C n )LO(aC 1n)
…
a1, n
列主次序存放
(1)
An
a2, n
…
amm, nn
(1)
LO(AC 1 )LO(a1 C 1 )
5.1.2 数组的抽象类型定义 8
•DestroyArray(A):销毁数组A。
•GetValue(A,e, index1, … , indexn ): 初始条件:A 是 n 维数组,e 为元素变量,随后是
n 个下标值。 操作结果:若各下标合法,则用e返回数组A中由 由index1,… indexn所指定的元素的值.
Ri=<aj1…ji….jn,aj1…ji+1…jn>| 1≤jk ≤bk, 1≤k≤n 且 k≠i, 1≤ji ≤bi-1, aj1…j2….jn,aj1…ji+1…jn∈D,i=1,…n}
基本操作:
• InitArray (A, n, bound1, … , boundn ); 操作结果:如果维数 n 和各维长度合法,则构造 相应的数组 A,并且返回 TRUE。
5
A = (α1, α 2, … , α n )
每个数据元素α j是一个列向量形式的线性表
α j = ( a1j , a2j , … , am, j )
1≤j ≤n
a11
a21
Am×n =
…
am,1
a12 a22 …
am, 2
a13 a23 ……
am, 3
a1, n a2, n …
am, n
每个数据元素是一个行向量形式的线性表
可以把二维数组看成是这样一个定长线性表:它的 每个数据元素也是一个定长线性表。
例如,下面是一个二维数组,且以 m 行 n 列的矩阵 形式表示。
a11 a12 a13 … a 1.n
a21 a22 a23 … a2, n
Am×n =
…
…
………
am1 am2 am3 … am, n
二维数组 A 还可以看成是一个线性表:
1
第 5 章 数组和广义表
5.15.数1 数组组的的逻逻辑辑结结构构 5.25.数2 数组组的的顺顺序序存存储储结结构构 5.35.矩3 矩阵阵的的压压缩缩存存储储 5.45.广4 广义义表表
2
5.1 数组的逻辑结构
数组 (array) 是最常用的数据结构之一。几乎所有 的程序设计语言都把数组类型设定为固有类型。
• SetValue ( A, e, index1, … , indexn ); 初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值。 操作结果:若各下标合法,则将数组A中由
index1,… indexn所指定的元素的值置为e.
9
5.2 数组的顺序存储结构
由于内存储器的结构是一维的。一维数组可直接采 用顺序存储。用一维的内存存储表示多维数组时,需按 某种次序将数组中元素排成一线性序列,再将这个线性 序列存放在一维的内存中,即数组的顺序存储结构表示。
也可以说,数组中的每个数据元素都对应于一组下 标( j1 , j2 , … , jn ),每个下标取值范围是 1≤ji≤bi , bi 称 为第 i 维的长度( i = 1, 2, …, n)。显然,当 n = 1 时,n 维数组就退化为定长的线性表。反之,n 维数组也可以看 成是线性表的推广。
4
数组的地址计算
14
(1)一维数组的地址计算:
设一维数组为:A=(a1,a2,…,ai,…,an),数组中每个元 素占size个存储单元,则元素ai的存储地址为:
Loc(A[i])=Loc(A[1])+(i-1)*size。
⑵二维数组的地址计算
15
假设每个数据元素占 1 个存储单元,且以行序为主序的进行存
线性结构中的数据都是非结构的原子类型,元素的 值是不再分解的。而数组可以看成是线性表在下述含义 上的扩展: 表中的数据元素本身也是一种数据结构。
数组的定义 数组的基本操作
5.1.1 数组的定义
3
数组是由下标和值组成的序对集合。在数组中,一 旦给定下标,都存在一个与其相对应的值,这个值就称 为数组元素。