第 16 次课 第五章 数组和广义表 教学目的和要求: 1...

16
第 16 第第 第第第 第第第第第第 教教教教教教教1 教教教教教教教教教教 、。 2 教教教教教教教教教教教教教教 、。 教教教教教1 教教教教教教教教 、。 2 教教教教教教教教教教教教教教 、。 教教教教6 教教

Upload: reuben-webb

Post on 01-Jan-2016

82 views

Category:

Documents


0 download

DESCRIPTION

第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。 2 、广义表的存储方式和基本操作。 授课时间: 6 学时. 5.1 数组的定义(了解即可) 数组是我们最熟悉的数据类型,在早期的高级语言中,数组是唯一可供使用的复合数据类型。由于数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和下界,因此,数组的处理比其它复杂的结构更为简单。多维数组是一维数组的推广。例如,二维数组: a11 a12 … a1 n - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

第 16次课第五章 数组和广义表

教学目的和要求:1 、了解数组的组织形式。2 、了解广义表的概念和存储方式。重点和难点:1 、数组的组织形式。2 、广义表的存储方式和基本操作。授课时间: 6 学时

Page 2: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

5.1数组的定义(了解即可)数组是我们最熟悉的数据类型,在早期的高级语

言中,数组是唯一可供使用的复合数据类型。由于数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和下界,因此,数组的处理比其它复杂的结构更为简单。多维数组是一维数组的推广。例如,二维数组: a11 a12 … a1 n

a21 a22 … a2 n

… … … …

am 1 am 2 … am n

数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作。

Page 3: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

5.2数组的顺序表示多维数组在逻辑上是多维的,但是内存却

是一维的。因此多维数组在内存中要转化为一维存储。

有两种转换方式,一种是行优先方式,如C 语言、 Pascal 语言等。一种是列优先方式,如 Fortran 语言等。对于二维数组 A :

1 2

3 4

Page 4: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

其行优先存储 如下 :

A[0][0] 0 1

A[0][1] 1 2

A[1][0] 2 3

A[1][1] 3 4

Page 5: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

列优先存储 如下 :

A[0][0] 0 1

A[1][0] 1 3

A[0][1] 2 2

A[1][1] 3 4

Page 6: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

那么二维数组有下标 A[i][j] ,一维数组有下标 k ,则 k 与 i , j 之间的关系如何呢?同理,三维数组、四维数组、多维数组呢?

Page 7: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

以 C 语言为例:有二维数组 A[m][n] ,其在内存中的存储位置就是 A ,每个数组元素占用空间 L 字节,那么数组元素 A[i][j] 在内存中的存储位置 Loc ( A[i][j] ) = ?Loc ( A[0][0] ) =A ;A[0][1] 前面只有一个元素 A[0][0] ,所以:Loc ( A[0][1] ) =Loc ( A[0][0] ) +1*L

所以求 Loc ( A[i][j] ),必须求出 A[i][j] 前面有几个元素。第 0 行:有元素 n 个第 1 行:有元素 n 个…

第 i-1 行:有元素 n 个第 i 行: A[i][j] 前面共有 A[i][0]---A[i][j-1] j 个元素;所以: Loc ( A[i][j] ) =A+ ( n*i+j ) *L 。

Page 8: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

元素个数满足下面的关系:

数组 A[m][n]待求元素: A[i][j]

每维元素个数: m n

待求元素的下标: i j

* +

Page 9: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

5.3矩阵的压缩存储5.3.1 特殊矩阵

所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵,下面我们讨论几种特殊矩阵的压缩存储。

常见的特殊矩阵有:对称矩阵、三角矩阵、对角矩阵等。下面我们以对称矩阵为例来看特殊矩阵的存储方式。

Page 10: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

在一个 n 阶方阵 A 中,若元素满足下述性质: aij=aji 1 i,j n≦ ≦则称 A 为对称矩阵。

如下图便是一个 5 阶对称矩阵。

1 5 1 3 7

5 0 8 0 0

1 8 9 2 6

3 0 2 5 1

7 0 6 1 3

Page 11: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储空间,这样,能节约近一半的存储空间。不失一般性,我们按“行优先顺序”存储主对角线(包括对角线)以下的元素,其存储形式如图所示:

1

5 0

1 8 9

3 0 2 5

7 0 6 1 3

Page 12: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

在这个下三角矩阵中,第 i 行恰有 i 个元素,元素总数为: n(n+1)/2

因此,我们可以按行优先次序将这些元素存放在一个向量 sa[0..n(n+1)/2-1] 中。为了便于访问对称矩阵 A 中的元素,我们必须在 aij 和 sa[k] 之间找一个对应关系。

K 恰好就是 sa[0]----sa[k-1] 个元素的个数

Page 13: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

若 i j≧ ,则 aij 在下三角形中。 aij 之前的 i行(从第 1 行到第 i-1 行)一共有 :

1+2+…+i-1=i*(i-1)/2 个元素, 在第 i 行上, aij 之前恰有 j-1 个元素(即 ai1,ai2,…,ai,j-1 ),因此 ai,j 前就有: k=i*(i-1)/2+j -1 个元素 0 k<n(n+1)/2 ≦

Page 14: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

若 i<j ,则 aij 是在上三角矩阵中。因为 aij=aji ,所以只要交换上述对应关系式中的 i 和 j即可得到: k=j*(j-1)/2+i-1 0 k<n(n+1)/2 ≦ 令 I=max(i,j) , J=min(i,j) ,则 k 和 i, j 的对应关系可统一为: k=I*(I-1)/2+J -1 0 k<n(n+1)/2 ≦

Page 15: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

因此, aij 的地址可用下列式计算: LOC(aij)=LOC(sa[k])

=LOC(sa[0])+k*d=LOC(sa[0])+[I*(I-1)/2+J-1]*d

有了上述的下标交换关系,对于任意给定一组下标 (i , j) ,均可在 sa[k] 中找到矩阵元素 aij ,反之,对所有的 k=0,1,2,…n(n+1)/2-1 ,都能确定 sa[k] 中的元素在矩阵中的位置 (i,j) 。由此,称 sa[n(n+1)/2] 为 n 阶对称矩阵 A 的压缩存储 .

Page 16: 第 16 次课 第五章 数组和广义表 教学目的和要求: 1 、了解数组的组织形式。 2 、了解广义表的概念和存储方式。 重点和难点: 1 、数组的组织形式。

思考题:1 、给出数组 int A [5][4] ;当它在内存中按行存放和

按列存放时,分别写出数组元素 A[i][j] 的地址计算公式(设每个元素占两个存储单元)。

2. 已知 n 阶下三角矩阵 A( 即当 i<j 时,有 aij≠0) ,按照压缩存储的思想,可以将其主对角线以下所有元素 ( 包括主对角线上元素 )依次存放于一维数组 B中。请写出从第一列开始采用列序为主序分配方式时在 B 中确定元素 aij 的存放位置的公式。

3. A 是一个三对角矩阵、行数与列数相等,用压缩存储的方法将其压缩存储列一堆的数组 SA[1….3n-2]中(按行顺序存储),则 SA[K] 对应的矩阵元素的下标为:行值 I= ( ),列值 J= ( ),反过来,若知道 A 中元素的下标 I , J ,则其存储住值置 K= ( )。(写出表达式)