第六章 数组和广义表

引言

  1. 文章大纲:本文由知识点思维导图,注意事项与易错点,题型总结,方法心得四部分组成。
  2. 思维导图中,标红的是重点内容,标黄的是次重点。
  3. 码字不易,如果这篇文章对您有帮助的话,希望您能点赞、评论、收藏,投币、转发、关注。您的鼓励就是我前进的动力!

知识点思维导图

在这里插入图片描述
点此查看原图

补充:

  1. 一个n维数组类型可以定义为其数据元素为 n-1维数组类型的一维数组类型。
  2. 行/列优先存储:
    1)行优先存储:将数组元素按行排列,第i+1个行向量紧接在第i个行向量后面。其存储的线性序列为: a 00 , a 01 , … , a ( 0 , n − 1 ) , a 10 , a 11 , … , a ( 1 , n − 1 ) , … , a ( m − 1 , 0 ) , … , a ( m − 1 , n − 1 ) a_{00},a_{01},…,a_{(0,n-1)},a_{10},a_{11},…,a_{(1,n-1)},…,a_{(m-1,0)}, …,a_{(m-1,n-1)} a00,a01,,a(0,n1),a10,a11,,a(1,n1),,a(m1,0),,a(m1,n1)
    2)列优先存储:将数组元素按列排列,第j+1个列向量紧接在第j个列向量之后,其存储的线性序列为: a 00 , a 10 , … , a ( m − 1 , 0 ) , a 01 , a 11 , … , a ( m − 1 , 1 ) … , a m − 1 , 1 , … , a ( n − 1 , m − 1 ) a_{00},a_{10},…,a_{(m-1,0)},a_{01},a_{11},…,a_{(m-1,1)}…,a_{m-1,1}, …,a_{(n-1,m-1)} a00,a10,,a(m1,0),a01,a11,,a(m1,1),am1,1,,a(n1,m1)
    3)在扩展BASIC、PL/1、COBOL、PASCAL和C语言中用的都是行序为主序,而在FORTRAN语言中用的是列序为主序
  3. 矩阵的压缩存储:
    1)特殊矩阵:值相同的元素或者零元素在矩阵中的分布有一定规律的矩阵。
    2)稀疏因子=非零元 / (矩阵行数×列数)。
  4. 广义表:
    1)广义表可以这样来理解,广义表中的一个数据元素可以是另一个广义表。
    2)广义表有两种结构的结点:一种是表结点,用于表示列表;一种是原子结点,用于表示原子。
    3)一个表结点可由3个域组成:标志域、指示表头的指针域和指示表尾的指针域。而原子节结点只需两个域,标志域和值域。
    4)广义表的3个重要性质:广义表是一种多层次的数据结构;广义表可以是递归的表;广义表可以为其他表所共享。

注意事项与易错点

  1. 广义表的长度=最大括号中的逗号数加1;深度=广义表中括号的重数。
  2. 任何一个非空表其表头可能是原子,也可能是子表,而其表尾必定为子表。
  3. 当广义表LS非空时,称第一个元素 a 1 a_1 a1 为LS的表头(Head),其余元素组成的表 ( a 2 , a 3 , … , a n ) (a_2,a_3,…,a_n) (a2,a3,,an) 称LS的表尾(Tail)。表尾不是表的最后一个元素,而是除了表头外其余元素组成的表。

题型总结

一、计算数据元素的地址

  1. 理论依据:只要知道开始结点的地址,维数和每维的上、下界,以及每个数组元素所占用的单元数,就可以将数组元素存放地址表示为其下标的线性函数。
  2. 例如,二维数组A[m][n]按“行优先顺序”存储在内存中,假设每个元素占用L个存储单元。元素 a i j a_{ij} aij的存储地址应是数组的基地址加上排在 a i j a_{ij} aij前面的元素所占用的单元数 a i j a_{ij} aij的地址计算函数为:
    L O C ( i , j ) = L O C ( 0 , 0 ) + [ i × n + j ] × L \boxed{LOC(i,j)=LOC(0,0)+[i×n+j]×L} LOC(i,j)=LOC(0,0)+[i×n+j]×L

1)若为列优先存储,只需将公式中 [ i × n + j ] [i×n+j] [i×n+j] 换为 [ j × m + i ] [j×m+i] [j×m+i] 即可。
2)理解公式要点:「元素 a i j a_{ij} aij的存储地址是数组的基地址加上排在 a i j a_{ij} aij前面的元素所占用的单元数。」

  1. 例题:设有二维数组A[10,20],其每个元素占两个字节, A[0][0]存储地址为100,若按行优先顺序存储,则元素A[6,6]的存储地址为____,按列优先顺序存储,元素A[6,6]的存储地址为 ____。
    解析:
    行优先:100+(6×20+6)×2=352
    列优先:100+(6×10+6)×2=232

方法心得

NULL

参考资料:
[1] 程杰. 大话数据结构. 北京:清华大学出版社, 2020.
[2]严蔚敏,吴伟民. 数据结构 (C语言版). 北京:清华大学出版社, 1997.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值