数组
数组的定义:
-
数组:按一定格式排列起来,具有相同类型的数据元素的集合
-
一维数组:若线性表总的数据元素为非结构的简单元素,则称为一维数组
-
一维数组的逻辑结构:线性结构。定长的线性表
-
int num[5]
-
-
二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组
-
二维数组的逻辑结构
-
非线性结构:每一个数据元素即在一个行表中,又在一个列表中·
-
线性结构定长的线性表:该线性表的每一个数据元素也是一个定长的线性表
-
int num[5][8]
-
-
在C语言总,一个二维数组类型定义为一维数组类型(其分量类型为一维数组类型)即:
typedef elemtype array2[m][n];
// 等价于
typedef elemtype array1[n];
typedef array1 array2[m];
-
三维数组:若二维数组中的元素又是一个一维数组,则称为三维数组
-
n维数组:若n - 1 维数组中的元素又是一个一维数组结构,则成为n维数组
结论:线性表的结构是数组结构的一个特例,而数组结构又是线性表结构的扩展
数组特点:结构固定--定义后,维数和维界不再改变
数组基本操作:除了结构的初始化和销毁之外,只有取元素和修该元素值的操作。
数组的顺序存储
存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就由个次序约定问题。
特殊矩阵的压缩存
储
-
什么是矩阵压缩?
若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。
-
什么样的矩阵能够压缩?
一些特殊矩阵,如:对称矩阵,对角矩阵,稀疏矩阵
-
什么叫稀疏矩阵?
矩阵中非零元素的个数比较少(一般小于5%)
对称矩阵
三角矩阵
对角矩阵
稀疏矩阵
-
三元组顺序表又称有序的双下标法。
-
三元组顺序表的优点:非零元在表中按行序有序存储,因此便于进行依次顺序处理的矩阵运算
-
三元组顺序表的缺点:不能随机存取,若按行号存取某一行中的非零元,则需从头开始进行查找。
稀疏数组的链式存储结构:十字链表
-
优点:他能够灵活的插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算
-
在十字链表中,矩阵的每一个非零元素用一个节点表示,该结点除了( row ,col , value)以外,还有两个域
-
right:用于链接同一行中的下一个非零元素
-
down:用于链接同一列中的下一个非零元素
-
-
十字链表中结点的结构示意图
广义表
广义表(又称列表Lists)是n>=0 个元素a0,a1,...,an-1的有限序列,其中每一个ai或者原子,或者是一个广义表。
广义表的性质
-
广义表中的数据元素有相对次序,一个直接前驱和一个直接后继
-
广义表的长度定义为最外层所包含元素的个数;
-
广义表的深度定义为该广义表展开后所含括号的层数;
-
广义表可以为其他表共享;
-
广义表可以是一个递归的表
-
广义表是多层次的结构,广义表的元素可以是单元素,也可以是子表,而子表的元素还可以是子表
广义表和线性表的区别
广义表可以看成是线性表的推广,线性表是广义表的特例
广义表的基本运算
案例分析与实现