数据结构讲义四:数组.pptVIP

  • 0
  • 0
  • 约9.59千字
  • 约 29页
  • 2017-06-09 发布于湖北
  • 举报
数据结构讲义四:数组

第四章 数组 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表 4.1 数组的定义和特点 定义 维数和维界 二维数组的类型定义: 等价于 typedef ElemType Array1[n]; typedef Array1 Array2[m]; typedef ElemType Array2[m][n]; Array2 A; 二维的数组 = 定长的线性表 a11 a12 a13 ... a1n a21 a22 a23 ... a2n Amxn= ...... am1 am2 am3 ... amn Amxn=((a11,a12,a13,...a1n),(a21,a22,a23,...a2n),..., (am1,am2,am3,...amn)) 数组的顺序表示和实现 除了初始化和销毁之外, 数组一般只有存取操作和修改元素值的操作. 通常不作删除和插入. 行序为主序:(C语言,PASCAL, BASIC等) Amxn=(a11,a12,a13,...a1n,a21,a22,a23,...a2n,...am1,am2,am3,...amn) LOC[1,1] 为基地址: LOC[i,j] = LOC[1,1] + (n*(i-1)+j-1)*L (1=i=m, 1=j=n, 每个数据元素占L个存储单元) LOC[3,4] = LOC[1,1] + (5*(3-1)+4-1)*L = 1000 + 13 * 2 = 1026 LOC[0,0] 为基地址: LOC[i,j] = LOC[0,0] + (n*i+j)*L (0=im, 0=jn, 每个数据元素占L个存储单元) LOC[i,j,k] = LOC[0,0,0] + (n*h*i+ h*j + k)*L (0=im, 0=jn, 0=kh, 每个数据元素占L个存储单元) 一般n维数组的行主元存储地址计算公式 b1,b2,...,bn是n维的维界,数组元素A(j1,j2,...,jn)的存储位置为 LOC[j1,j2,...jn]= LOC[0,0,...,0] + (b2?b3?...?bn?j1 + b3?...?bn?j2 + ...... + bn?jn-1 + jn )?L n-1 n = LOC[0,0,...,0] + ( ? ji ? bk + jn)?L i=1 k=i+1 例: 在C语言中,设 数组A[5][6][7][8]的首地址为 2000, 每个元素占2个字节; 求元素A[3][4][5][4]的地址. LOC[3,4,5,4] = 2000 + (6*7*8*3 + 7*8*4 + 8*5 + 4)*2 = 2000 + ( 336*3 + 56*4 + 8*5 + 1*4)*2 = 2000 + (1008 + 224 + 40 + 4)*2 = 4552 数组顺序存储的表示和实现 Status InitArray(Array A, int dim, ...) { va_list ap; if(dim1 || dim MAX_ARRAY_DIM) return ERROR; A.dim = dim; A.bounds = (int * ) malloc(dim*sizeof(int)); if(!A.bounds) exit(OVERFLOW); elemtotal = 1; va_start(ap, dim); for(i =0 ; idim; ++i){ A.bounds[i] = va_arg(ap,int); if(A.bounds[i] 0) return UNDERFLOW; elemtotal

文档评论(0)

1亿VIP精品文档

相关文档