第五章 数组和广义表
数组的相关概念
数组是一种特殊的线性表:一维、二维、多维。
数组只有存取、修改元素的操作。因为数组存储需要分配连续的存储空间,如果进行插入、删除元素的时候,会打乱数组原有的存储空间。所以数组也满足随机访问的特点。
数组的表示
顺序存储表示和实现:用一组连续的存储单元为数组分配存储空间
行优先存储:先一行一行排,则一行一行的元素在空间上是线性关系。同理可得列优先存储原理。
地址公式:实质是将一个多维数组的每个元素按照某种对应关系存到一个一维数组里面->一般情况是计算基地址与目标元素之间差的元素个数。
矩阵的压缩存储
引入:稀疏矩阵的非零元个数很少->正常分配空间会浪费很多->采用压缩存储(只存储非零元素的相关信息)->矩阵的压缩存储。
对称矩阵:矩阵元素以正对角线成两边对称 ->成对称的两个元素共享同一个空间->找到对称矩阵上的每一个元素与一维数组里的每个元素之间的下标关系即可。
对角矩阵:上对角或下对角存在元素->找到对角矩阵里的每个元素与一维数组里面的每个元素的下标关系即可。
带状矩阵:在主对角线上以及左右位置均存在非零元素->找到带状矩阵里的每个元素与一维数组里面的每个元素的下标关系即可。
稀疏矩阵的压缩存储->三元顺序表->稀疏矩阵的压缩存储方法
求稀疏矩阵的转置矩阵->两种方法:行列互换、借助辅助向量
十字链表:在链表中每个非零元素可以用一个含有5个域的结点表示,right域链接同一行中的下一个非零元,down域用于链接同一列中的下一个非零元素。综上,每个非零元素及时某行链表中的一个结点,又是某个列链表中的一个结点,则构成了一个十字链表。
广义表的相关概念
广义表是线性表的推广,区别在于线性表的元素是一个原子项,广义表的元素可以是一个线性表或者原子项。
广义表的长度:逗号数+1
广义表的深度:括号的层数
元素的深度:包含该元素的括号的层数
性质
1、广义表的元素可以是子表,而子表的元素可以是子表。
2、广义表可以为其他表共享。
3、广义表的递归性:广义表中所含弧的重数称为表的深度->表中元素的层数就是包括该元素的括弧重数。
广义表的存储结构
采用链式存储的结构:每个数据元素可以用一个结点表示。由于广义表中有两种数据元素,原子或者广义表->两种结点->表结点、原子结点->表结点:标志域、指示表头的指针域、指示表尾的指针域;原子域:标志域和值域。
数据结构与算法
于 2023-11-09 12:19:39 首次发布