DS-数组和广义表计算相关
计算问题核心求 元素是第几个
多维数组的存储
元素的存储地址指该元素在内存的起始地址或该元素前一个元素的末端位置
a i , j a_{i,j} ai,j的存储地址=初始地址 + + + ( a i , j a_{i,j} ai,j前的元素个数 ∗ * ∗ 单个元素所占存储单元)
做计算元素存储位置类型题前先理清五个问题
-
数组的存储结构是几行几列并理清每行有几个元素&每列有几个元素
-
存储次序是行优先(一行一行的存)还是列优先(一列一列的存)
-
确定该元素所在行(列)前有几行(列)
-
确定所在行(列)中该元素前有几个元素
-
基地址和每个元素所占的存储单元
针对第一个问题,题目的条件常见的有
“七行六列的数组…“或”二维数组A[0…6,0…5]“或”二维数组A[1…7,1…6]“或”二维数组A[7][6]”
针对第二个问题,看清题目要求就行
针对第五个问题,题目中可能不会给基地址,而给出其他元素的存储地址(首个元素的地址即为基地址)
特殊矩阵的压缩存储
题型:求特殊矩阵A中的元素在 压缩一维数组N中的位置(下标)
对称矩阵
对称矩阵的压缩要理清几个问题
-
搞清对称矩阵和一维矩阵的结构(编号是否从零开始)
-
搞清存储次序是
上三角部分按列存储或下三角部分按行存储(这两种情况比较简单)
上三角部分按行存储或下三角部分按列存储(这两种情况比较恶心)
建议画图!!!
-
根据i,j大小关系确定是否在所求区域,不是则互换i,j位置(i>=j下三角)
-
确定该元素所在行(列)前有几行(列)
-
确定该元素在所在行(列)有几个元素
三角矩阵
计算参照对称矩阵,被忘了最后一个常数。
对角矩阵
三对角矩阵
对角矩阵下标从1,1开始,一维数组下标从0开始: k = 2 ∗ i + j − 3 k=2*i+j-3 k=2∗i+j−3
对角矩阵下标从1,1开始,一维数组下标从1开始: k = 2 ∗ i + j − 2 k=2*i+j-2 k=2∗i+j−2
对角矩阵下标从0,0开始,一维数组下标从0开始: k = 2 ∗ ( i + 1 ) + ( j + 1 ) − 3 = 2 ∗ i + j k=2*(i+1)+(j+1)-3=2*i+j k=2∗(i+1)+(j+1)−3=2∗i+j
对角矩阵下标从0,0开始,一维数组下标从0开始: k = 2 ∗ ( i + 1 ) + ( j + 1 ) − 3 = 2 ∗ i + j + 1 k=2*(i+1)+(j+1)-3=2*i+j+1 k=2∗(i+1)+(j+1)−3=2∗i+j+1
稀疏矩阵
稀疏矩阵的压缩存储办法是只存储非零元素(三元组和十字链表),不能随机存取