数据结构-01随笔
忙里偷闲
>时光飞速; 昨天还听同事说起:" 眨眼功夫都3月多了,闭眼想起,这感觉还停留在昨天的新年快乐"
>这几天来有点迷失自我,有那么的一瞬间被外界干扰,一下子忘记该做什么,如何去做,我下一步的计划又是如何了
>这几天被家里人催婚,心中惆怅 ; 虽然不屑于谈恋爱,其实心里的借口无非就是怕影响自己所有的计划(恋爱脑,一旦上头了,脑子全是对方,根本无法学习与追求时代的进步);说到头来就是没有找到一位共同进步的伴侣
>突然想起"心中无爱-自然成神"哈哈哈,
>思来想去,制定了一份2024年上半年的软考计划
一维数组的存储位置
提:每个元素占用4个字节,假设a[0]存储在2000单元,a[3]地址是多少?
a[3]=a[0]+3+4=2000+12=2012
规律:array(i)=array(0)+i*L 但要求 i>0
翻译:假设求数组第i个元素的存储位置=数组第0个元素的存储位置+i乘以L(字节大小)
要求:求第i个元素的存储位置时,i必须大于0
二维数组的存储位置
以下有一组二维数组
- a[0,n-1]:设n=10行;则a[0,10-1]==最后一行
- a[m-1,n-1]:设m=10列;则a[10-1,n-1]==最后一列最后一行
以下行和列为主的区别
- 数组起始存储位置Loc(0,0);每个元素占L个存储单位;
提:以行序为主序求a[2,1]的存储位置
解:a[2][1]=Loc(0,0)+(2*10+1)*L
规律:Loc(i,j)=Loc(0,0)+(i*n+j)*L
翻译:a[2][1]=数据起始位置+(所在行*一行有多少列+所在列的位置)*元素所占存储单位
提:以列序为主序求a[2,1]的存储位置
解:a[2][1]=Loc(0,0)+(1*10+2)*L
规律:Loc(i,j)=Loc(0,0)+(j*m+i)*L
翻译:a[2][1]=数据起始位置+(所在列*一列有多少行+所在行的位置)*元素所占存储单位
- 假设以行序为主序存储二维数组 A=array[1,......,100,1,......,100];设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]是多少?
LOC[5,5]=10+(4*100+4)*2
=10+404*2
=10+808
=818
- 设有数据A[i,j];数组的每个元素长度为3个字节,i的值为1到8,j的值为1到10;数组从内存地址首地址BA开始顺序存放,当用以列为主序存放时,元素A[5,8]的存储首地址是多少?
注意哦:起始位置从1开始的,刚刚画图是从0开始的哈
A[5,8]=BA+(7*8+4)*3
=BA+60*3
=BA+180
- 二维数组A的每个元素是由10个字符组成的串,其行下标i=0,1...,8; 列下标j=1,2,...,10;若A按行先存储;元素A[8,5]的起始地址等于840;当A按列存储时的元素的起始地址相同也等于840的时候下标是多少;设每个字符占1字节
A. A[8,5]
B. A[3,10]
C. A[5,8]
D. A[0,9]
A[8,5]=A[0,1]+(8*10+4)*10
=A[0,1]+840
A[3,10]=A[0,1]+(9*9+3)*10
=A[0,1]+840
- 二维数组A[1,...,m,1,...,n](即m行,n列)按行存储在数组B[1,...,m*n]中,则二维数组元素A[i,j]在一堆数组B中的下标为( )
A.(i-1)*n+j
B.(i-1)*n+j-1
C.i*(j-1)
D.j*m+i-1
设:m=5;n=5;得B[1,2,3,4,...25]
看题目得知B为一维数组;A为二维数组
解:
设A[i,j]=A[3,4]
A: (3-1)*5+4-1