目录
5.1 数组
本节所讨论的数组与高级语言中的数组区别:
• 高级语言中的数组是顺序结构;
• 而本章的数组既可以是顺序的,也可以是链式结构,用户可根据需要选择。
数组的抽象数据类型
ADT Array{
数据对象
数据关系
基本操作
(1) InitArray (&A,n,bound1,…,boundn) //构造数组A
(2) DestroyArray (&A) // 销毁数组A
(3) Value(A,&e,index1,…,indexn) //取数组元素值
(4) Assign (A,&e,index1,…,indexn) //给数组元素赋值
}
一维数组
二维数组
行序优先表示
设数组开始存放位置 LOC( 0, 0 ) = a LOC ( j, k ) = a + j * m + k
三维数组
a[m1][m2] [m3] 各维元素个数为 m1, m2, m3
下标为 i1, i2, i3的数组元素的存储位置: LOC ( i1, i2, i3 ) = a + i1* m2 * m3 + i2* m3 + i3
n维数组
各维元素个数为 m1, m2, m3, …, mn,下标为 i1, i2, i3, …, in 的数组元素的存储位置:
特殊矩阵的压缩存储
1. 什么是压缩存储?
若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。
2. 什么样的矩阵能够压缩?
一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。
3. 什么叫稀疏矩阵?
矩阵中非零元素的个数较少(一般小于5%)
1. 对称矩阵
[特点] 在n*n的矩阵a中,满足如下性质:
aij=aji (1 <= i, j <= n)
[存储方法] 只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间。
2. 三角矩阵
[特点] 对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。
[存储方法] 重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间: sa[1.. n(n+1)/2+1]
3. 对角矩阵(带状矩阵)
[特点] 在n´n的方阵中,非零元素集中在主对角线及其两侧共L(奇数)条对角线的带状区域内 — L对角矩阵。
[存储方法]
以对角线的顺序存储
只存储带状区内的元素
稀疏矩阵
[特点] 大多数元素为零。
[常用存储方法] 只记录每一非零元素(i,j,aij )
节省空间,但丧失随机存取功能
•顺序存储:三元组表
•链式存储:十字(正交)链表
5.2 广义表
一.广义表的定义
一个长度为n≥0 的广义表是一个数据结构:LS = ( a1, a2, ……, an-1, an)
其中,LS为广义表的名字, ai为表中元素;ai可以是数据元素(原子),也可以是一个表(子表)。n为表的长度,长度为0的表称为空表。若ai为不可再分割的具体信息,则称ai为原子元。若ai为一个子表,则称ai为表元素。这里,用小写字母表示原子元素,用大写字母表示表元素。
二、广义表的例子
广义表的基本运算
•(1)求表头GetHead(L):非空广义表的第一个元素,可以是一个单元素,也可以是一个子表
•(2)求表尾GetTail(L):非空广义表除去表头元素以外其它元素所构成的表。表尾一定是一个表