学习数据结构(五)——数组

1.数组

数组是下标与值成对的集合。在C++中有静态与动态之分:(1)静态数组:定义时显式声明数据类型与空间内存大小。(2)动态数组:程序运行时才分配空间的。

数组有两种顺序映像方式:(1)以行序为主序(低下标优先):最右边的下标先变化,从右到左;(2)以列序为主序(高下标优先):最左边的下标先变化,从左到右。

2.矩阵压缩

主要是针对特殊矩阵的压缩:例如:实对称矩阵、三角矩阵和对角矩阵。

(1)实对称矩阵

由于实对称矩阵中矩阵元素a_{i}_{j}=a_{j}_{i},可以节约一半空间,只需要上三角或者下三角元素即可。

(2)三角阵

类似于实对称矩阵。

(3)稀疏矩阵

其压缩方法是只存储非零元素,包括该元素的行标和列标。因此,一个非零元素由三元组才能唯一确定。该线性表构成了稀疏矩阵的三元组顺序表。

当稀疏矩阵个数和位置经过运算变化较大时,就不再适合用顺序结构存储了。应采用下面方法存储:

(1)单向链表表示法

用指针域将三元组元素链接起来。

(2)行链表表示法

矩阵是一个包括行指针的顺序表,行指针链接的是同行每个列的非零元素。首先有一个矩阵类,主要包括行线性表、行序、列序、数字、最大空间,行线性表由当前行序号和行指针组成,行指针指向列元素,包括列序号、值、结点指针。

(3)十字链表表示法

十字链表为矩阵的每一行设置一个单独的循环链表,同时也为每一列设置一个单独的循环链表,这样稀疏矩阵的每一个元素就同时包含在了两个链表中,大大降低了链表长度和时间复杂度。

其中,row.col和val分别代表非零元素所在的行标、列标以及元素值;down和right分别用来链接同列和同行的下一个非零元素节点。也就是说,同列非零元素是通过down指针链接成一个列链表,而 right 指针则把同行非零元素链接成一个行链表。对稀疏矩阵的每个非零元素来说,既是列链表中一个结点,同时也是行链表中一个结点。每个非零元素就好比处于一个十字路口,因此,这种表示稀疏矩阵的存储结构称为十字链表。

十字链表中设置行头结点,列头结点以及链表头结点。它们采用与非零元素结点类似的结构。由于行头结点中只有right指针指向该行第一个非零元素(down为空),列头结点中只有down指针指向该列的第一个非零元素(right 为空)。因此,为了节省空间,行头结点和列头结点可以共用一组头结点,行列头结点数为矩阵行数和列数中的最大值,并且设置row和 col的值均为0,各个头结点之间用next指针域连接。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值