数据结构——第4章 数组与广义表(1)
创始人
2024-05-30 03:08:51
0

多维数组

  • 1.数组的逻辑结构
  • 2.数组的内存映像
    • 2.1.一维数组的内存映像
    • 2.2.二维数组的内存映像
    • 2.3.三维数组的内存映像

1.数组的逻辑结构

数组是我们熟悉的一种存储结构,除了实现线性表的顺序存储结构之后,其实际应用非常广泛。数组作为一种数据结构,其特点是结构中的元素本身可以具有某种结构的数据,但属于同一数据类型。比如,一维数组可以看作线性表,二维数组可以看作“数据元素是线性表”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推,因此数组可以看作线性表的扩展。
数组是一个具有固定格式和数量的数据有序集,每一个数据元素有唯一的一组下标来标识,因此,在数组不适合做插入、删除数据元素的操作。在数组中通常执行下面两种操作:

  • 取值操作:给定一组下标,读其对应的数据元素值。
  • 赋值操作:给定一组下标,存储或修改与其对应的数据元素。

2.数组的内存映像

不同的程序设计语言对数组的存储空间分配的原则是不一样的,有的是“以行为主序”,有的是“以列为主序”。
以C语言为例,二维数组的内存分配原则是“以行为主序”,每一行是一个一维数组,所有行首尾相连也是一个一维数组,因为内存的地址空间是一维的,数组的行列固定后,通过一个映像函数,即可根据数组元素的下标得到它的存储地址。

2.1.一维数组的内存映像

一维数组的内存映像是按数组元素位序先后分配的一片连续存储空间。

2.2.二维数组的内存映像

寻找二维数组的鞍点(行最小,列最大)

void saddle(int A[], int n, int m)
{int i, j;int min;int col=0;for (i = 0; i < n; i++){min = *(A + i * m);for (j = 0; j < m; j++){if (min > *(A + i * m + j)){int tmp = min;min = *(A + i * m + j);*(A + i * m + j) = tmp;col = j;}}int k = 0;for (k = 0; k < m; k++){if (min < *(A + k * m + col))break;}if (k == m)printf("%d\n", min);}
}

2.3.三维数组的内存映像

三维数组有三个维度,第一个维度表示页向量,第二个维度表示行向量,第三个维度表示列向量。
C语言中的三维数组内存映像是先按页、再按行为主序分配的一片连续的内存空间。
M * N * P的长度,找到位置元素的关系*(起始地址+i * N * P+j * p+k)* sizeof(元素字节的大小)。
结论:任何一个高维数组都可按一维数组使用。

相关内容

热门资讯

退社保能退多少钱,怎么退? 退...   想必大家对社保都很熟悉了,比起其他商业保险,社保是强制性的每人都要缴纳的。很多朋友会遇到特殊情况...
新手送外卖的十大技巧,美团众包... 也许在很多人的认知中,跑单是一件极其简单的事情,只需要接单、取餐、最后将餐送到顾客的手里即可了,但其...
夏至,也是南极仲冬节|自然瞬镜... 《自然瞬镜》视频征集中喊你拍大片➡大美自然 万物有灵 感动瞬间……原创真实 内容健康 积极向上……希...
2022年湖南养老金上调最新消...   养老金一直以来都备受关注,不止是退休之后的老年人还是现在年轻人,都关注着。前段时间各个地区的养老...
一天花30元“假装上班”?不只... 转自:全国总工会“如果你正处于职场空窗期,想保持上班时的生活节奏,这里可以为你提供一个‘假装上班’的...
双甲子缤纷芳华 中国电影“再出... 来源:中国新闻网 中新社上海6月21日电 题:双甲子缤纷芳华 中国电影“再出发”中新社记者 王笈世界...
体检可以用社保卡吗?能报销吗?...   如今人们的生活水平提高了以后对于身体的健康状况也是越来越关注了,很多朋友都是一年一次的体检,或者...
68万茶王驾到!6月25日,云... 重磅预告!!!6月25日,东莞玉兰大剧院将迎来一场茶界“天花板”级的盛宴!来自“云南白茶第一县”——...
美团外卖下单后怎么修改时间,具...   如今很多年轻人的就餐方式就是点外卖,省时间又方便。我们一般都是选择好商品就去结算,就可以选择商品...
2025全国节能宣传周启动,西... 节能增效  焕“新”引领从衣食住行开始自治区各级公共机构全体干部职工,广大市民朋友们:2025年6月...