第六章 数组和广义表

6.1 数组

数组是具有相同类型的数据结构的有限序列,可以将它看作是线性表的推广。

  • 数组跟数组类型的区别:

    前者可以借助后者来存储,像线性表的顺序存储结构(即顺序表)就是一种借助一维数组这种数据类型来存储的。但二者不能混淆。

  • 存储地址

    • 一维数组

      LOC( ai ) = LOC( ac ) + ( i-c ) * k ,( c <= i <= n )

    • 二维数组

      按行优先存放:
      LOC( ai,j ) = LOC( ac1,c2 ) + ( ( i - c1 ) * ( d2 - c2 + 1 ) +( j - c2 ) ) * k , (c <= i <= n)
      按行优先存放:
      LOC( ai,j ) = LOC( ac1,c2 ) + ( ( j - c2 ) * ( d1 - c1 + 1 ) + ( i - c1 ) ) * k , (c <= i <= n)

  • 特殊矩阵的压缩存储

    特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵,为了节省存储空间,特>别是在高阶矩阵的情况下,可以利用特殊矩阵的规律对它们进行压缩存储,以提高>存储空间效率。
    特殊矩阵的主要形式有:
    (1)对称矩阵
    (2)上三角矩阵/下三角矩阵
    (3)对角矩阵
    它们都是方阵,即行数和列数相同。

6.2 稀疏矩阵

稀疏矩阵是一种特殊的二维数组。
一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数t十分小时,
即 s《《 t 时,称该矩阵为稀疏矩阵

  • 稀疏矩阵和特殊矩阵的不同点:

    1. 特殊矩阵的特殊元素(值相同元素、常量元素)分布有规律。
    2. 稀疏矩阵的特殊元素(非0元素)分布没有规律。
  • 稀疏矩阵的三元组表示

    define MaxSize 100 //矩阵中非零元素最多个数
    typedef struct {
    int r; //行号
    int c; //列号
    ElemType d; //元素值
    } TupNode; //三元组定义
    typedef struct
    { int rows; //行数值
    int cols; //列数值
    int nums; //非零元素个数
    TupNode data[MaxSize];
    } TSMatrix; //三元组顺序表定义

  • 稀疏矩阵的十字链表表示

6.3 广义表

广义表也可以看成是线性表的推广,它是采用递归方法定义的。

  • GL=(a1,a2,…,ai,…,an)
    1. 若n=0时称为空表
    2. ai为广义表的第i个元素。如果ai属于原子类型,称之为广义表GL的原子
    3. 如果ai又是一个广义表,称之为广义表GL的子表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值