数据结构 (五) 多维数组

一、总结:
对这一部分还是很生疏,不太会做,而且Openjudge上的题目进度缓慢,不开森。。。
但是我还是会好好做题的,也得抽空复习一下,不然都忘光了。
二、笔记:
线性表——具有相同类型的数据元素的有限序列。

(多维)数组——线性表中的数据元素可以是线性表,但所有元素的类型相同。

广义表——线性表中的数据元素可以是线性表,且元素的类型可以不相同。

⑴ 存取:给定一组下标,读出对应的数组元素;

⑵ 修改:给定一组下标,存储或修改与其相对应的数组元素。

存取和修改操作本质上只对应一种操作——寻址

数组没有插入和删除操作,所以,不用预留空间,适合采用顺序存储。

按行优先存储的寻址

1111

列优先存储的寻址

设数组开始存放位置 LOC( 0, 0 ) = a,

每个元素占用 l 个存储单元

则a[i][j]的存储地址:

LOC ( i, j ) = a + ( j *n +i ) * l

三维数组

2222

N维数组

3333

特殊矩阵和稀疏矩阵

特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。

稀疏矩阵:矩阵中有很多零元素。

压缩存储的基本思想是:

⑴ 为多个值相同的元素只分配一个存储空间;

⑵ 对零元素不分配存储空间。

对称矩阵的压缩存储

aij在一维数组中的序号

=
i×(i-1)/2+ j

∵一维数组下标从0开始

∴aij在一维数组中的下标

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

对于下三角中的元素aij(i≥j), 在一维数组中的下标k与i、j的关系为:

k=i×(i-1)/2+j-1 。

上三角中的元素aij(i<j),因为aij=aji,则访问和它对应的元素aji即可,即:

k=j×(j-1)/2+i -1。

稀疏矩阵的压缩存储

template
<class T>

struct
element

{    

    int row, col;     //行号,列号

    T item              //非零元素值

};

存储结构定义:

`

``
const int MaxTerm=100;

template <class T>

struct SparseMatrix

{

   T data[MaxTerm];   //存储非零元素

   int mu, nu, tu;           //行数,列数,非零元个数

};

广义表的存储结构——


头尾表示法

enum Elemtag {Atom, List};

template

struct GLNode {

Elemtag tag;

aunion
{

  T data; 

  struct 

  {

      GLNode *hp, *tp; 

   } ptr;                            

};

};



头尾表示法中:指针不再表示链表中节点之间的关系。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191021194318639.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjMzMDYz,size_16,color_FFFFFF,t_70)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值