A. 为什么每个 数组元素占 2 个字节的内 存单元
lz
你好
首先题目说的是按列优先
那么就是说优先存储列
简单地说,就是以下的存储方式:
a[0,0]
->
a[1,0]
->
a[2,0]
->
a[3,0]
->
a[4,0]
->
a[5,0]
a[0,1]
->
a[1,1]
->
a[2,1]
->
a[3,1]
->
a[4,1]
->
a[5,1]
……
a[0,6]
->
a[1,6]
->
a[2,6]
->
a[3,6]
->
a[4,6]
->
a[5,6]
那么按照这中存储方式,因为a[5,5]的列标为5,那么它前面有0~4
共有5列
每一列6个元素
也就有5*6=30个元素
再加上列表为5的列中,含有0~5(航标是5)
共有6个元素
,
但是排除a[5,5]本身
就只有5个元素
也就是30+5=35个
每一个占5个字节
因此a[5,5]的地址为:
1000
+
35
*
5
=
1175
希望能帮助你哈
B. 设二维数组A[3][5],每个数组元素占用2个存储单元,若按列优先顺序进行存储,A[0][0]的存储地址为100
列优先则是一列一列地存储数据,所以A[0][0]的是1005,A[1][0]的是1007,以此类推得A[2][3]的是122,也就是2*3*3+2*2=122。
C. 数组a[50][80]首地址a[0][0]为2000H,每个元素占2个存储单元,以行序主序顺序存储,则a[45][67]存储地址是
数组a[50][80]每行有80列,以行序为主序,所以a[45][67]地址与a[0][0]的偏移为(45 * 80 + 67)*2=7334,其中乘以2是存储单元大小,转换成16进制7334=1CA6H,加上2000H,即得3CA6H
D. 二维数组A按行顺序存储,其中每个元素占2个存储单元。
设二维数组a[8][10]中,每个数组元素占4个存储单元,数组元素a[2][2]按行优先顺序存放的存储地址是1000,则数组元素a[0][0]的存储地址是
1000-4*(2*10+2)=912
E. 二维数组[8][10],按行序优先存储,且每个元素占2个存储单元,若第一个元素的存储位置为b,则b+20的元素为__
设列宽为n,行索引为i,列索引为j,基地址指针为b,则
b[i][j]=b+(n*i+j)*2=b+20
10i+j=10
j=10-10i
又因
i=[20/n*2]=1
(计算行索引,将偏移量除列宽取整后获得,n*2因为一个元素占2字节你懂得)
所以
j=10-10*1=0
因此b+20=b[i][j]=b[1][0]
F. 二维数组A[4][5]按行优先顺序存储,若每个元素占2个存储单元,且第一个元素A[0][0]的存储地址为1000...
A[3][2]的地址为1000+(3*5+2)*2=1034
G. 某线性表采用顺序存储结构,若首地址为100,每个数据元素占用2个存储单元,则第8个元素的存储地址为
第8个元素的存储地址就是114和115,标称存储地址为114。
顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequential mapping)。它以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
由此得到的存储结构为顺序存储结构,通常顺序存储结构是借助于计算机程序设计语言(例如c/c++)的数组来描述的。
(7)每个元素占2个存储单元扩展阅读
顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
顺序存储结构封装需要三个属性:
存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置。
线性表的最大存储容量:数组的长度MaxSize。
线性表的当前长度:length。
注意:数组的长度与线性表的当前长度需要区分一下:数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。而线性表的当前长度是线性表中元素的个数,是会变化的。