C/C++语言数据结构快速入门(代码解析+内容解析)特殊矩阵

Posted 蓝盒子bluebox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++语言数据结构快速入门(代码解析+内容解析)特殊矩阵相关的知识,希望对你有一定的参考价值。

一、压缩矩阵

1、一维数组的存储结构

ElemType a[10];  //ElemType型一维数组



(1)计算上述第一种方式行优先存储,计算某个元素的地址


M行N列的二维数组b[M][N]中,如果按照行优先存储,则b[i][j]的存储地址=LOC +(i * N + j) * sizeof(ElemType)

例如上方的数据计算b[1][2]的存储地址 为LOC + 6 *sizeof(ElemType)

(2)采用列优先存储二维数组

M行N列的二维数组b[M][N]中,若按列优先存储,则b[i][j]的存储地址 = LOC + (j * M + i) * sizeof(ElemType)


b[1][2]的地址:= LOC + 5 * sizeof(ElemType)

2、普通矩阵的存储(直接使用二维数组存储即可)


注意:描述矩阵元素的时候,行、列通常从1开始;而描述数组时通常下标从1开始;而描述数组时通常下标从0开始
(具体看题目给与的条件,注意审题)

3、特殊矩阵(可以压缩存储空间)

a、对称矩阵的压缩存储(方阵nxn即行数和列数是相同的)

压缩存储策略:只存储主对角线+下三角区(或主对角线+上三角区)


按照行优先原则存储将各个元素一次存入一维数组当中。

第一行
第二行
第三行

思考
数组大小应该是多少?

(1+n)* n/2

站在程序员的角度,对称矩阵压缩后怎样才能更加方便使用?

可以实现一个“映射”函数矩阵下标->一维数组下标

Key:按照行优先的原则,ai,j是第几个元素?


b、三角矩阵的压缩存储




以上是关于C/C++语言数据结构快速入门(代码解析+内容解析)特殊矩阵的主要内容,如果未能解决你的问题,请参考以下文章

C/C++语言数据结构快速入门(代码解析+内容解析)栈的应用

C/C++语言数据结构快速入门(代码解析+内容解析)栈

C/C++语言数据结构快速入门(代码解析+内容解析)栈

C/C++语言数据结构快速入门(代码解析+内容解析)队列的应用

C/C++语言数据结构快速入门(代码解析+内容解析)特殊矩阵

C/C++语言数据结构快速入门(代码解析+内容解析)队列