成为很厉害很厉害的人,最重要的,就是要热血,永远也不要让你的血凉下去。

数据结构-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

二维数组的存储位置

以下有一组二维数组

  1. a[0,n-1]:设n=10行;则a[0,10-1]==最后一行
  2. 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]=数据起始位置+(所在列*一列有多少行+所在行的位置)*元素所占存储单位

 


  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

 

 

  1. 设有数据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

 

 

  1. 二维数组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

 

 

  1. 二维数组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

 

 

posted @ 2023-03-16 11:00  顾留芳啊  阅读(292)  评论(0编辑  收藏  举报