多维数组和广义表(C++)

本文介绍了多维数组和广义表这两种非线性结构,重点讲解了多维数组的行优先和列优先存储方式,以及特殊矩阵如对称矩阵、三角矩阵和对角矩阵的压缩存储方法。同时,探讨了稀疏矩阵的三元组表、带行指针的链表和十字链表等存储策略,并对广义表的概念、深度和分类进行了说明。
摘要由CSDN通过智能技术生成

线性表、栈、队列和串都是线性表的数据结构,他们的逻辑结构特征是:每个数据元素之多有一个直接前趋和直接后继。对于多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个元素可能有多个直接前趋和多个直接后继。

一、数组概念

  1. 一维数组
    可以看成是一个线性表或一个向量,在计算机中是一段连续的存储单元,适用于随机查找。

  2. 二维数组
    二维数组
    由图可以知道,每个元素最多由两个直接前驱和两个直接后继(边界除外),故是一种典型的非线性结构。

多维数组最多有多个直接前驱和直接后继,也是非线性结构。

  1. 多维数组在计算机内的存储
    由于内存结构是一维的,故必须按照某种次序将数组元素排成一个线性序列。

二、多维数组的存储结构

数组是先定义后使用,且为静态分配存储单元,所以采用顺序存储。有行优先顺序存储、列优先顺序存储。

对于数组 A(nxm)
1. 行优先 顺序存储

(a11->a12->a13->...a1n)->(a21->a22->a23->...a2n)->...(am1->...->amn)

最左边下标变化慢,做for外层循环;右边变化快,做for内层循环。

aij地址:前面有i行(i×n),改行前面有j个元素

LOC(aij) = LOC(a00) + (i*n+j)*d  // d为每个元素所占空间大小
// 三维数组
LOC(aijk) = LOC(a000) + (i*n*p+j*p+k)*d

2 . 列优先 顺序存储

(a11->a21->a31->..an1)->(a12->a22->a32->...an2)->(a1m->a2m->...->anm)

最又边下标变化慢,做for外层循环;左边变化快,做for内层循环。

aij地址:前面有j列(j×m),改行前面有i个元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值