多维数组 特殊矩阵的存储

数组:和顺序表、链表、栈和队列一样,都用来储存具有“一对一”逻辑关系数据的先行存储。顺序表、链表、栈和队列储存的都是不可再分的数据元素,而数组既可以用来存储不可再分的数据元素,也可以用来存储像顺序表、链表这样的数据结构。

一维数组:指的是存储不可再分数据元素的数组。

二位数组:指的存储一堆数组的一维数组

行序优先:

LOC(j,k)=a+j*x+k;

列序优先:

LOC(j,k)=a+k*x+j;

n维数组:指的是存储n-1维数组的一维数组

LOC(i1,i2,i3)=a+i1*m2*m3+i2*m3+i3

特殊矩阵的压缩存储:

1、什么是压缩存储?

若多个数据的值都相同,则只分配一个元素值的存储空间。

2、什么样的矩阵能够压缩?

一些特殊矩阵如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3、什么叫稀疏矩阵?

矩阵中粉岭元素的个数较少(一般小于5)

1、对称矩阵:

对称矩阵值得是各数据元素沿主对角线对阵的矩阵。

可以使用一维数组存储对称矩阵

由于矩阵中沿着对角线两侧的数据相等,因此数组中只需要存储对角线的一测的数据即可。

存储下三角中的元素,将个元素所在的航标i和列表j带入下面公式:

k=i*(i-1)/2+j-1

2、上(下)三角矩阵:

主对角上元素全部相同的矩阵叫下三角矩阵

主队叫一下元素全部相同的矩阵叫上三角矩阵。

压缩存储的方式是:

上(下)三角矩阵采用对称矩阵存储的方式

上(下)三角矩阵存储元素和提取元素的过程和对称矩阵相同

3、对焦矩阵(带状矩阵)

在n*n的方阵中,非零元素集中在主对角线及其两侧工(奇数)条对角线的带状区域————L对焦矩阵。

一对角线的顺序存储,只存储非零元素

4、稀疏矩阵

如果矩阵中分布大量的元素0,即非0元素非常少,这类矩阵称为系数矩阵。

压缩存储系数矩阵:只存储矩阵中的非零元素,与前面的存储方法不同,稀疏矩阵非零元素的存储需要同时存储改元素所在矩阵中的航标和列标。

存储:

矩阵中各个非零元素的值;

所在矩阵中的行标和列标;

矩阵的总行数和总列数;

#define number 20

//矩阵的结构表示

typedef struct{

                triple data[number];

int n,m,num;

}TsMatrix;

稀疏矩阵-行逻辑链接的顺序表

行逻辑链接的顺序表和三元组顺序表存储矩阵的过程完全相同;

将矩阵中非零元素的三元组(行标、列标和元素值)存储在一维数组中。但为了提高提取数据的效率,前者在存储矩阵时比后者多使用了一个数组,专门记录矩阵中每一行地一个非0元素在一维数组中的位置。

1、将矩阵中的非零元素采用三元组的形式存储到一维数组data中,和三元组顺序表一样

2、使用数组rpos记录矩阵中每行第一个非零元素在一维数组中的储存位置

稀疏矩阵-十字链表法

对于压缩存储稀疏矩阵,无论是使用三元组顺序表,韩式使用行逻辑链接的顺序表,归根揭底是使用数组存储稀疏矩阵。数组不利于插入和删除数据,以上两种压缩存储方式都不适合解决类似“向矩阵中添加或删除非零元素”的问题。

1、矩阵中每个非零元素可能用一个含有5哥域的节点来表示:

i,j,e表示改非零元所在的行数,列数,元素值;

向右域right用以i按揭同一行的下一个非零元

向下域down用以链接同一列中下一个非零元

2、每个非零元同时是莫格行列表或者列联表的节点,把一个矩阵转化成一个十字交叉链表。

3、可用两个一维数组来表示,分别存储行链表的通知真和列链表的透支陈几行几个行链表将所有链表的头节点各自存在一个一维数组中

串的普通模式匹配算法:

普通模式匹配算法,拿一个串同另一个串中的比较的是否为串B的字串

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值