计算对应元素位置
将矩阵的上三角保存到一维数组中,则原本个元素的矩阵可以压缩到 n*(n+1)/2,则 i,j 对应一维数组中的规律是等差数列的前 i 项和+j 的规律,注意数组和矩阵起始的位置
例如,下三角以行序或者上三角以列序为主序放在一维数组 M[0, (n+1)/2-1]中,最左上角为对应数组中的第 k 个,则 i,j 位置对应一维数组的关系为,i * ( i + 1 ) / 2 + j + k,如果从 1,1 开始取值的话,就是 i - 1 和 j - 1 了
稀疏矩阵
按照压缩存储的概念,只存储稀疏矩阵的非 0 元,故存储节点的同时要记录下所在行列的位置,即三元组
三元组即用()包住行列的下标和值,顺序存储表示就是则 3 列的表
也可用十字链表存储
广义表
长度和深度
长度是最上层元素的个数,即广义表元素的个数(注意原子元素和表元素区别),深度是括号的最大层数
递归的广义表「深度」为无穷大
head 和 tail 操作取出原子
非空时,第一个元素为表头,即 head 操作取出的原子,「其余的组成的表」是表尾
可以理解为,head 去括号(只留第一个元素),tail 去第一个元素,也就是说,要想取出原子,则最后的操作必定为 head
头尾链表存储结构,计算深度长度
❝(14)广义表 A = (a, ( (b, c) , d ))
❞
![bb48bf3142f09915789410c50cc83651.png](https://i-blog.csdnimg.cn/blog_migrate/0ec3b666dd12da6486ad55400789d55b.png)
长度为 2,深度为 3
❝(16)给出广义表的表头表尾分析法,确定广义表和深度长度
❞
![d3ac476865f02fdf616a7db7df620858.png](https://i-blog.csdnimg.cn/blog_migrate/bb5747b4d4872a8f5204e0a8ba506cc5.png)
这里花少了个 d
广义表为(a, ( (b, c ), (d) ), (), ()),长度为 4,深度为 3
❝(17)给出广义表的表头表尾分析法,确定广义表和深度长度
❞
![da93b06de56f8cf069315a669e8142d8.png](https://i-blog.csdnimg.cn/blog_migrate/15f2a7bbb8286f740297d342a5d4c6b6.png)
广义表( (a), ( ( b, c), d)) 长度为 2 深度为 3
广义表的共享结构图形
![e486945111aac1ec14220e58d65e05e7.png](https://i-blog.csdnimg.cn/blog_migrate/5ba7630bf3a71361419fc9ed718ac57d.png)
算法要求
算法名称 | 对于书上位置 | 算法编号 | 真题 |
---|---|---|---|
「三元组矩阵转置」 | 99 | 5.1 | 15 |