[数据结构]数组和广义表

第五章  数组和广义表

学习提要:

1.了解数组的两种存储表示方法,并掌握数组在以行为主的存储结构中的地址计算方法。

2.掌握对特殊矩阵进行压缩存储时的下标变换公式。

3.了解稀疏矩阵的两种压缩存储方法的特点和适用范围,领会以三元组表示稀疏矩阵时

  进行矩阵运算采用的处理方法。  

4.掌握广义表的结构特点及其存储表示方法。

 

5.1 数组的类型定义

ADT Array {

  数据对象:

      D={aj1,j2, ...,,ji,jn| ji =0,...,bi -1,  i=1,2,..,n }

  数据关系:

      R={R1, R2, ..., Rn}

      Ri={<aj1,... ji,... jn , aj1, ...ji +1, ...jn  > |  0 £ jk £ bk -1,

     1 £ k £ n  且k ¹ i,  0 £ ji £ bi -2, i=2,...,n }

  

} ADT Array

基本操作

InitArray(&A, n, bound1, ..., boundn)

DestroyArray(&A)

Value(A, &e, index1, ..., indexn)

Assign(&A, e, index1, ..., indexn)

InitArray(&A, n, bound1, ..., boundn)

  操作结果:若维数 n 和各维长度合法,则构造相应的数组A,并返回OK。

DestroyArray(&A)
  操作结果:销毁数组A。

Value(A, &e, index1, ..., indexn)

  初始条件:A是n维数组,e为元素变量,随后是n 个下标值。

  操作结果:若各下标不超界,则e赋值为所指定的A 的元素值,并返回OK。

Assign(&A, e, index1, ..., indexn)

  初始条件:A是n维数组,e为元素变量,随后是n 个下标值。
  操作结果:若下标不超界,则将e的值赋给所指定的A的元素,并返OK。

 

二维数组的定义:

数据对象:

   D = {aij | 0≤i≤b1-1, 0 ≤j≤b2-1}

数据关系:

  R = { ROW, COL }

   ROW = {<ai,j,ai,j+1> | 0≤i≤b1-2, 0≤j≤b2-1}

   COL = {<ai,j,ai+1,j> | 0≤i≤b1-1, 0≤ j≤b2-2}

二维数组的定义:


5.2 数组的顺序表示和实现

类型特点:

 (1) 只有引用型操作,没有加工型操作;

 (2) 数组是多维的结构,而存储空间是一个一维的结构。

有两种顺序映象的方式:

 (1)以行序为主序

 (2)以列序为主序

 

 

以“行序为主序”的存储映象:

二维数组A中任一元素ai,j 的存储位置

  LOC(i,j) = LOC(0,0) + (n×i+j)×            

             称为基地址或基址

以“列序为主序”的存储映象:

二维数组A中任一元素ai,j 的存储位置

  LOC(i,j) = LOC(0,0) + (m×j+i)×L

 

推广到一般情况,可得到 n 维数组数据元素存储位置的映象关系

LOC(j1, j2, ..., jn ) = LOC(0,0,...,0) + ∑ ci ji

其中 cn = L,ci-1 = bi ×ci ,  1 < i £ n。称为 n 维数组的映象函数。数组元素的存储位置是其下标的线性函数。

 

5.3 矩阵的压缩存储


以常规方法,即以二维数组表示高阶的稀疏矩阵时产生的问题:

(1)  零值元素占了很大空间;

(2)  计算中进行了很多和零值的运算。

解决问题的原则:

(1) 尽可能少存或不存零值元素;

(2) 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值