数据结构学习--第3章(2)

数组与线性表的关系

数组是线性表的推广。一维数组可以视为一个线性表;二维数组也可以视为其元素定长的线性表。
数组一旦定义,其维数和维界(下标取值范围)就不可再改变。

数组的存储结构

一维数组A[0……n-1]

LOC(ai)=LOC(a0)+i*L (0 ≤ i<n)→<下标默认从0开始>

LOC(ai)=LOC(a1)+(i-1)*L (1 ≤ i ≤ n)→<下标从1开始>

二维数组

按行优先:先行后列

下标:[0,h1],下标:[0,h2]
LOC(ai,j)=LOC(a0,0)+[i*(h2+1)+j]*L

i*(h2+1)+j→前面有i行,每列h2个元素,共i*h2个元素。再加上第i+1行前面的j个元素。

按列优先:先列后行

下标:[0,h1],下标:[0,h2]
LOC(ai,j)=LOC(a0,0)+[j*(h1+1)+i]*L

i*(h2+1)+j→前面有i行,每列h2个元素,共i*h2个元素。再加上第i+1行前面的j个元素。

矩阵的压缩存储

描述矩阵时行、列号通常从1开始

对称矩阵、

压缩策略:

  1. 只存主对角线+下三角区
  2. 只存主对角线+上三角区

策略一

  1. 只存储主对角线+下三角区
  2. 行优先原则将各元素存入一维数组

一维数组大小:n/2+n*n/2 = (1+n)*n/2
在这里插入图片描述
在这里插入图片描述
key
aij在一维数组中的映射

  1. i>=j时,元素处于下三角区
    第 1+2+3+…+(i-1)+j = (i-1)*i/2+j 个元素
    一维数组下标k = (i-1)*i/2+j -1
  2. i<j时,元素处于上三角区
    一维数组下标k = (j-1)*j/2+i -1

在这里插入图片描述

三角矩阵

在这里插入图片描述

下三角矩阵

压缩策略:
行优先原则将橙色区元素存入一维数组中。并在最后一个位置存储常量c
在这里插入图片描述在这里插入图片描述

key:

  1. 一维数组长长度:n*(n+1)/2+1
  2. 当i>=j时,元素处于下三角区:
    一维数组中的第 1+2+…+(i-1)+j = (i-1)*i/2个
    一维数组下标:(i-1)*i/2+j-1
  3. 当i<j时,位于上三角区:
    一维数组下标:n(n-1)/2
上三角矩阵

在这里插入图片描述
在这里插入图片描述

aij

  1. 当i<=j,上三角区域:
    一维数组下标:n+(n-1)+…+(n-(i-1-1))+(j-i) = n+(n-1)+…+(n-i+2)+(j-i) =(2n-i-2)(i-1)+(j-i)
  2. 当i>j,下三角区域:
    一维数组下标:n(n+1)/2

三对角矩阵

在这里插入图片描述

三对角矩阵,又叫带状矩阵

  1. 当|i-j|>1时,有aij=0
  2. 压缩策略:
    行优先(或列有限)只存取带状部分
  3. 数组长度:3n-2
    在这里插入图片描述

key1:
aij 是第几个元素?

  1. 前 (i-1) 行一共 3*(i-1)-1个元素
  2. aij 是第i行第j-i+2个元素
  3. aij 是3*(i-1)-1+(j-i+2)=2i+j-2个元素
    数组下标:2i+j-3

key2:
数组下标k对应哪个元素?
(第k+1个元素在第几行,第几列?)

  1. i-1行 有3*(i-1)-1个元素,
    i行一共有3i-1个元素
    →3
    (i-1)-1<k+13*i-1
  2. 所以,i≥(k+2)/3
    →i=(k+2)/3 【向上取整】
  3. k+1 = (i-1)3-1 +(j-i+2) → k=2i+j-3
  4. 所以,j = k-2*i+3

稀疏矩阵

  1. 稀疏矩阵:非0元素远远少于矩阵元素个数。

2.压缩策略一
三元组<行、列、值>
在这里插入图片描述在这里插入图片描述

压缩策略二
链式存储:十字链表发
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值