广义线性表---多维数组
线性表:相同类型的数据元素的有限序列
多维数组:线性表中数据元素可以是线性表,但所有元素的类型相同
数组特点:元素的推广性、同一性、确定性
基本操作:存取、修改(两者本质是寻址操作)
广义表:线性表的数据元素可以是线性表,元素的类型可以不相同
数组的存储结构与寻址
一维数组
任一元素 ai 的存储地址可由下式确定:
二维数组
存储方式:
按行优先:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。
按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素。
按行优先存储的寻址 :aij前面的元素个数 = 阴影部分的面积
=整行数×每行元素个数+本行中aij前面的元素个数
=(i -l1)×(h2 -l2+1)+(j -l2)
多维数组
矩阵的压缩存储
特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。
对称矩阵():
下三角中的元素(i>=j),在数组中的下标k与i、j的关系为:k=i*(i+1)/2+j
上三角中的元素(i<j),在数组中的下标k与i、j的关系为:k=j*(j+1)/2+i
三角矩阵:上三角矩阵:矩阵中任一元素aij在数组中的下标k与i、j的对应关系:
下三角矩阵:矩阵中任一元素aij在数组中的下标k与i、j的对应关系:
对角矩阵:所有非零元素都集中在以主对角线为中心的带状区域中,除了主对角线和 它的上下方若干条对角线的元素外,所有其他元素都为零
稀疏矩阵:矩阵中有很多零元素。
三元组(行号,列号,非零元素值):表示稀疏矩阵中的每个非零元素
三元组表:稀疏矩阵的非零元素对应的三元组所构成的集合,按行优先顺序排列成一个线性表
1、三元组顺序表:稀疏矩阵的压缩存储(要确定行列数才能对应唯一 稀疏矩阵)
基本思想:1、直接取,顺序存
2、顺序取,直接存
引入两个数组作为辅助数据结构:num[nu]:存储矩阵A中某列的非零元素的个数
cpot[nu]:初值表示矩阵A中某列的第一个非零元素在B中的位置
2、十字链表:用链接存储结构存储三元组表,每个非零元素对应的三元组存为一个链表结点
结构:
row: 存储非零元素的行号 col:存储非零元素的列号 item:存储非零元素的值
right: 指针域,指向同一行中的下一个三元组 down:指针域,指向同一列中的下一个三元组
压缩存储的基本思想:⑴ 为多个值相同的元素只分配一个存储空间;
⑵ 对零元素不分配存储空间。
广义表线性表----广义表
定义:
n(n≥0)个数据元素的有限序列 记作: LS=(a1,a2,… ai …,an)
LS是广义表的名称,ai(1≤i≤n)是LS的成员(或直接元素),可以是单个的数据元素,也可以是一个广义表,分别称为LS的单元素(或原子)和子表。
用大写字母表示广义表,用小写字母表示单元素
逻辑结构:直接元素之间是线性关系
基本概念:
长度:广义表LS中的直接元素的个数
深度:广义表LS中括号的最大嵌套层数
表头:广义表LS非空时,称第一个元素为LS的表头
表尾:广义表LS中除表头外其余元素组成的广义表
存储:
广义表中的数据元素的类型不统一,难以采用顺序存储结构来存储
利用头尾表示法存储广义表:广义表结点——存储广义表、元素结点——存储单元素
结点结构:
基本运算:取表头运算、取表尾运算