数据结构-数组与广义表学习资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组是多维的结构,而存储空间是一个一维的结构。(存储 时需要一个次序约定)
6
5.1.2 数组的顺序存储结构
数组的实现机制
( 1 ) 一 维 数 组 ( n 个 元 素 ) 中 任 一 元 素 a i 的 内 存 单 元 地 址 L o c ( a i ) L o c ( a 0 ) i * L ( 0 i n )
– 则前面有一个i-1行的完整三角形,共有元素
(1+i-1)(i-1)/2 = i(i-1)/2个
– 另外,同一行,前面还有j-1个元素
– 所以,k = i(i-1)/2+j-1
12
2、三角矩阵
以主对角线划分, n阶三角矩阵有n阶上三角矩阵和n阶下三角矩阵两种。 n阶上三角矩阵的下三角(不包括主对角线)中的元素均为0(或常数)。 n阶下三角矩阵正好相反,它的主对角线上方均为0(或常数)。 注:在大多数情况下, n阶三角矩阵常数为零。
LTA[0..n(n+1)/2-1]
a11 a21 a22 … … k= 0 1 2 … …
aij … … ann n(n+1)/2-1
11
k的含义:按行优先,是第k个(从0开始)
i=3
k=4 152683
1 567 5 289 6 830 7 904
j=2
7904
• 公式的推导(下三角)
– i=3,j=2
数据结构-数组与广义表
知识结构图
数组与广义表
数组
广义表
类表 型示 定方 义法
特 殊 矩 阵
稀 疏 矩 阵
逻存 辑储 应 结结 用 构构
压各
缩种
存运
储算
2
5.1 数组
数组是n(n>1)个相同数据类型的数据元素a0,a1,a2,...,an-1 构成的占用一块地址连续的内存单元的有限序列。 数组中任意一个元素可以用该元素在数组中的位置来表示, 数组元素的位置通常称作数组的下标。
3
5.1.1 数组的概念及其与线性表的关系
由定义知,n维数组中有b1b2 … bn个数据元素,每个 数据元素都受到n维关系的约束。
直观的n维数组
以二维数组为例讨论。将二维数组看成是一个定长的线性表,
其每个元素又是一个定长的线性表。
设二维数组A=(aij)mn,则 A=(α1,α2,…,αp) (p=m或n)
在每个关系中,元素 (0<=ji<=bi-2)都有一个直接后继
;
a j1 j2 ... jn
数据元素都必须属于同一数据类型;
n=1时,退化为定长的线性表;
n维数组可以看成是线性表的推广。
数组一旦被定义,则维数已定,对于数组的操作只有存取元 素和修改元素。(一旦建立了数组,数组中的元素个数和元 素之间的关系就不再发生变动)
其中每个数据元素αj是一个列向量(线性表) : αj =(a1j ,a2j ,…,amj) 1≦j≦n
或是一个行向量:
αi =(ai1 ,ai2 ,…,ain) 1≦i≦m
如图5-1所示。
4
a11 a12 … a1n
A=
a21 a22 … a2n ……………
am1 am2 … amn
(a) 矩阵表示形式
a11 a21 A= ┆
am1
a11 a12 … a1n
a21 a22 Βιβλιοθήκη Baidu a2n A= … … … … …
am1 am2 … amn
(b)行向量的一维数组形式
a12 a22 ┆
┆ ┆
a1n a2n ┆
am2 ┆ amn
(c)列向量的一维数组形式
图5-1 二维数组图例形式
5
n维数组的特点
每个数据元素都受着n个关系的约束;
a0的内存单元地址
每个元素所需的字节个数
( 2 ) 一 维 m 行 n 列 的 二 维 数 组
a00
A
a10
M
am1,0
a01 L a11 L MO am1,1 L
a0,n1
a1,n1
L o c ( a i j) L o c ( a 0 0 ) ( i* n j ) * L
M
am1,n1
行向量 下标 i
页向量 下标 i
列向量 下标 j
行向量 下标 j
列向量 下标 k
8
二维数组
三维数组
数组的顺序表示-小结
n维数组的特点: 数据元素同属于一种数据类型; 数组一旦被定义,则维数和各维长度不能改变; 数组操作只有引用型操作,没有加工型操作; 数组是多维结构,但存储空间是一维结构。
a11 a12 a13 L
c
a22 a23 L
A c
M
c
c a33 L M MO c cL
a1n
a2n
a3n
M
a mn
a11 c
以 行 序 为 主 序 的 求 元 素 地 址 的 公 式 : L o c (a ij) L o c (a c 1 ,c 2 ) [ (i c 1 )* (d 2 c 2 1 ) (j c 2 ) ]* L
以 列 序 为 主 序 的 求 元 素 地 址 的 公 式 : L o c (a ij) L o c (a c 1 ,c 2 ) [(j c 2 )* (d 1 c 1 1 ) (i c 1 )]* L
数组顺序表示的特点 存储单元地址连续(需要一段连续空间) 存储规则(以行(列)为主序)决定元素实际存储位置 随机存取 存储密度最大(100%)
9
5.2 矩阵的压缩存储
在科学与工程计算问题中,矩阵是一种常用的数学 对象,在高级语言编程时,通常将一个矩阵描述为 一个二维数组。这样,可以对其元素进行随机存取 ,各种矩阵运算也非常简单。
L o c ( a i j) L o c ( a 0 0 ) ( j* m i ) * L
7
( 3 ) 更 一 般 地 假 设 二 维 数 组 行 下 界 是 c 1 ,行 上 界 为 d 1 ,列 下 界 为 c 2 , 列 上 界 为 d 2 , 即 数 组 A [ c 1 . . . d 1 ,c 2 . . . d 2 ] 。
对于高阶矩阵,若其中非零元素呈某种规律分 布或者矩阵中有大量的零元素,若仍然用常规方法 存储,可能存储重复的非零元素或零元素,将造成 存储空间的大量浪费。对这类矩阵进行压缩存储:
◆ 多个相同的非零元素只分配一个存储空间; ◆ 零元素不分配空间。
10
5.2.1 特殊矩阵的压缩存储
1.对称矩阵 n阶矩阵A中元素满足性质a[i][j]=a[j][i] (1≤i,j≤n)。 (即aij=aji,1<=i,j<=n)