“数组”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) (→总结:) |
||
(未显示同一用户的20个中间版本) | |||
第8行: | 第8行: | ||
* 元素类型相同,每个元素占用存储单元相同; | * 元素类型相同,每个元素占用存储单元相同; | ||
* 下标有序,n个元素,下标是0~n-1。 | * 下标有序,n个元素,下标是0~n-1。 | ||
+ | |||
+ | |||
+ | === 2)一维数组 === | ||
+ | {| class="wikitable" | ||
+ | !数组类型 | ||
+ | !存储地址计算 | ||
+ | |- | ||
+ | |一维数组 | ||
+ | |A[i]的存储地址为:a+i*len | ||
+ | 首地址为a,len表示单个元素所占用的存储单元 | ||
+ | |} | ||
+ | 以存放首地址为100,每个元素占用3个存储单元为例 | ||
+ | [[文件:A0和A1占用的空间.png|无|缩略图|450x450像素]] | ||
+ | [[文件:偏移n*单个元素占用的存储单元.png|无|缩略图|600x600像素]] | ||
+ | |||
+ | |||
+ | |||
+ | === 3)二维数组 === | ||
+ | 3*4的二维数组: | ||
+ | |||
+ | 行*列 | ||
+ | [[文件:二维数组.png|无|缩略图|600x600像素]] | ||
+ | |||
+ | |||
+ | |||
+ | 3*4的二维数组,按行存储: | ||
+ | [[文件:二维数组 按行存储.png|无|缩略图|600x600像素]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | 二维数组在内存中也是顺序存储的,计算A<sub>22</sub>的偏移量时,主要分成两部分 | ||
+ | [[文件:A22偏移量.png|无|缩略图|300x300像素]] | ||
+ | 前面两行完整存储下来的空间,还有A<sub>22</sub>所在的行前面存放的部分元素 | ||
+ | |||
+ | |||
+ | |||
+ | 抽象后就是: | ||
+ | |||
+ | 首地址为A[0][0]的n行m列的二维数组(按行存储) | ||
+ | [[文件:二维数组n行m列.png|无|缩略图|600x600像素]] | ||
+ | [[文件:二维数组偏移量计算.png|无|缩略图|900x900像素]]A[i][j]的偏移量是:(m*i+j)*len | ||
+ | |||
+ | a[i][j]的存储地址:(m*i+j)*len+数组首地址 | ||
+ | |||
+ | |||
+ | |||
+ | 3*4的二维数组,按列存储: | ||
+ | [[文件:3*4按列存储.png|无|缩略图|600x600像素]] | ||
+ | [[文件:3*4按列存储分成两部分.png|无|缩略图|300x300像素]] | ||
+ | [[文件:二维数组按列存储偏移量计算.png|无|缩略图|600x600像素]] | ||
+ | A[i][j]的偏移量是:(n*j+i)*len | ||
+ | |||
+ | A[i][j]的存储地址:(n*j+i)*len + 数组首地址 | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !数组类型 | ||
+ | !存储地址计算 | ||
+ | |- | ||
+ | |一维数组 | ||
+ | |A[i]的存储地址为:a+i*len | ||
+ | |- | ||
+ | |二维数组A[m][n] | ||
+ | |A[i][j]的存储地址(按行存储)为:a+(i*n+j)*len | ||
+ | A[i][j]的存储地址(按列存储)为:a+(j*m+i)*len | ||
+ | |||
+ | 其中:首地址为A[0][0],用a表示 | ||
+ | |} | ||
+ | len表示数组单个元素所占用的存储单元 | ||
+ | |||
+ | |||
+ | === 考点:二维数组偏移量计算 === | ||
+ | 设数组A[1...n,1...m](n>1,m>1)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,1≤j≤m)相对于数组空间首地址的偏移量为()。 | ||
+ | |||
+ | A、(i-1)*m+j-1 √ | ||
+ | |||
+ | B、(i-1)*n+j-1 | ||
+ | |||
+ | C、(j-1)*m+i-1 | ||
+ | |||
+ | D、(j-1)*n+i-1 | ||
+ | |||
+ | 题解: | ||
+ | [[文件:二维数组偏移量计算题.png|无|缩略图|600x600像素]] | ||
+ | |||
+ | |||
+ | |||
+ | === 总结: === | ||
+ | 偏移量:元素个数*每个元素占用单元数 | ||
+ | |||
+ | 存储位置:偏移量+数组首地址 | ||
+ | |||
+ | 计算行数看行号变化,计算列数看列号变化 | ||
+ | |||
+ | 总个数:最大编号-最小编号+1 |
2022年9月17日 (六) 16:18的最新版本
https://www.bilibili.com/video/BV1hg411V7Bm?p=54
1)数组的概念
数组是由n个数据类型相同的元素所组成的序列。
注意:
- 空间连续,统一划分;
- 元素类型相同,每个元素占用存储单元相同;
- 下标有序,n个元素,下标是0~n-1。
2)一维数组
数组类型 | 存储地址计算 |
---|---|
一维数组 | A[i]的存储地址为:a+i*len
首地址为a,len表示单个元素所占用的存储单元 |
以存放首地址为100,每个元素占用3个存储单元为例
3)二维数组
3*4的二维数组:
行*列
3*4的二维数组,按行存储:
二维数组在内存中也是顺序存储的,计算A22的偏移量时,主要分成两部分
前面两行完整存储下来的空间,还有A22所在的行前面存放的部分元素
抽象后就是:
首地址为A[0][0]的n行m列的二维数组(按行存储)
A[i][j]的偏移量是:(m*i+j)*len
a[i][j]的存储地址:(m*i+j)*len+数组首地址
3*4的二维数组,按列存储:
A[i][j]的偏移量是:(n*j+i)*len
A[i][j]的存储地址:(n*j+i)*len + 数组首地址
数组类型 | 存储地址计算 |
---|---|
一维数组 | A[i]的存储地址为:a+i*len |
二维数组A[m][n] | A[i][j]的存储地址(按行存储)为:a+(i*n+j)*len
A[i][j]的存储地址(按列存储)为:a+(j*m+i)*len 其中:首地址为A[0][0],用a表示 |
len表示数组单个元素所占用的存储单元
考点:二维数组偏移量计算
设数组A[1...n,1...m](n>1,m>1)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,1≤j≤m)相对于数组空间首地址的偏移量为()。
A、(i-1)*m+j-1 √
B、(i-1)*n+j-1
C、(j-1)*m+i-1
D、(j-1)*n+i-1
题解:
总结:
偏移量:元素个数*每个元素占用单元数
存储位置:偏移量+数组首地址
计算行数看行号变化,计算列数看列号变化
总个数:最大编号-最小编号+1