数组和广义表可以看成是一种扩展的线性数据结构
特殊性不像栈和队列对数据元素的操作受限制
反应在数据元素的构成上面
1.数组的定义和运算
高级语言一般都支持数组这种数据类型
- (1)数组的定义
从逻辑结构上讲,数组可以看作一般线性表的扩充
一维数组就是线性表,二维数组可以看作其数据元素就是一维数组的线性表
多维数组可以看作:行向量线性表、列向量线性表(和线性代数很相似)
数组中的每一个元素由一个值和一个下标来表述
值代表数组中元素的数据信息
下标来描述改元素在数组中的相对位置
数组的维数不同,描述其相对位置的下标个数也不同 - (2)数组的运算
数组是一组有固定个数的元素的集合,对数组的操作本质就是地址计算的问题
获得特定位置的元素值
修改特定位置的元素值
数组的抽象数据类型定义
2.数组的顺序存储和实现
对于数组而言,采用顺序存储比较合适
在计算机内部,内存储器的结构是一维的
一维数组可以直接采用顺序存储,用一维的内存存储表示多维数组
- (1)按行存储
- (2)按列存储
- (3)一维数组地址的计算
A=(a1,a1,…,ai,…,an)
loc(A[i])=loc(A[1])+(i-1)*size
- (4)二维数组地址的计算
假设每个元素只占一个存储单元
loc(A[i][j])=loc(A[1][1])+n*(i-1)+(j-1)==
3.特殊矩阵的压缩存储
矩阵是科学计算、工程数学
只存储部分元素,提高存储空间的利用率
- (1)规律分布的特殊矩阵
三角矩阵:上三角矩阵、下三角矩阵、对称矩阵
带状矩阵 - (2)稀疏矩阵
矩阵中大多数元素都位0
稀疏矩阵的三元组表示法:行+列+值(只存储非0元素)
稀疏矩阵的链式存储结构:十字链表