【数据结构】数组与广义表-数据的顺序存储(图解)

210 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review

公众号:URLeisure 的复习仓库 (点击可见公众号二维码)

提示:以下是本篇文章正文内容,下面案例可供参考


数组的存储

  • 数组是由相同类型的数据元素构成的有限集合。

  • 一维数组可以看做一个线性表。

  • 二维数组也可以看作一个线性表 X = (X0,X1,X2,...,Xn-1),只不过每一个数据元素 Xi 也是一个线性表。

  • 同样,二维数组也可以看作一个线性表 Y = (Y0,Y1,Y2,...,Ym-1),只不过每一个数据元素 Yi 也是一个线性表。

一维数组: 一维数组 二维数组 二维数组X 二维数组Y

  • 数组一般采用顺序存储结构,因为存储单元是一维的,而数组可以是多维的。

  • 利用一组连续的存储单元来存储多维数组:

  • 以二维数组为例,可以按行序存储,即先存第一行,再存第二行……也可以按列序存储,先存第一列,再存第二列……

  • c 语言,java 都是按行序存储的。

寻找存储位置

寻找 aij 的存储位置。

按行存储

行序

  • 如果每个元素占L字节,那么共需要 (i×n + j ) × L 字节,只要用基地址加上这些字节就可以得到 aij 的存储地址。

  • 由图可计算出,LOC(aij) = LOC(a00) + (i×n + j ) × L。

按列存储

列序

  • 如果每个元素占L字节,那么共需要 (j×m + i ) × L 字节,只要用基地址加上这些字节就可以得到 aij 的存储地址。

  • 由图可计算出,LOC(aij) = LOC(a00) + (j×m + i ) × L。


总结

  • 计算时,注意下标的起始数字,本篇起始数字为 0。

关注公众号,感受不同的阅读体验

下期预告: 模式匹配 KMP 算法