数据结构习题及答案与实验指导(数组和广义表)5

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章数组和广义表

本章所讨论的多维数组和广义表是对线性表的推广,其特点是数据元素仍可被视为一个表。要求熟悉多维数组的逻辑结构、存储结构,广义表的逻辑结构、表示形式,以及矩阵的压缩存储的有关内容。

重点提示:

●多维数组的存储方式和存取特点

●特殊矩阵的存储

●稀疏矩阵的存储

●广义表的表示形式

5-1 重点难点指导

5-1-1 相关术语

1.特殊矩阵

要点:矩阵中非零元素或零元素的分布有一定规律的矩阵。

2.对称矩阵

要点:一种特殊矩阵;n阶方阵的元素满足性质:a ij=a ji(0≤i,j≤n-1)。

3.三角矩阵

要点:以主对角线划分,有上三角矩阵和下三角矩阵两种;主对角线以下,不包括主对角线中的元素,均为常数c,称为上三角矩阵;主对角线以上,不包括主对角线中的元素,均为常数c,称为下三角矩阵。

4.对角矩阵

要点:非零元素集中在以主对角线为中心的带状区域中,也称带状矩阵。

5.稀疏矩阵

要点:矩阵中非零元素的个数远小于矩阵元素总数的矩阵。

6.三元组表

要点:是稀疏矩阵的一种存储结构;将稀疏矩阵的非零元素的三元组(行、列和值)按行优先的顺序排列;得到结点均是三元组的线性表。

7.广义表

要点:是线性表的推广;是n个元素a1,a2,…,a n的有限序列;其中a i或者是原子或者是广义表;通常记为LS=(a1,a2,…,a n),LS为广义表的名字。

5-1-2 多维数组

1.对n维数组逻辑结构的理解

n维数组可视为由n-1维数组为元素的线性结构。

举例:一个m行n列的二维数组可视为由m个一维数组为元素组成的线性结构,其中

每个一维数组又由n 个单元素组成。

]a ,,a ,[a A A A A a a a a a a a a a Amn in i2i1i m 21mnv m2m12n 2221

1n 1211 =⎪⎪⎪

⎝⎛=

⎪⎪⎪⎪⎪⎭⎫

⎝⎛=其中

2.数组的顺序存储方式

(1)行优先顺序——将数组元素按行向量排列,即第i +1行紧接在第i 行后面。如Amn 的存储序列为:

a 11 a 12 … a 1n a 20 a 21 … a 2n … a m1 a m2 … a mn 第1行 第2行 … 第m 行

(2)列优先顺序——将数组元素按列向量排列,即第i +1列紧接在第i 列后面,如Amm 的存储序列为:

a 11 a 21 … a m1 a 12 a 22 … a m2 … a 1n a 2n … a mn 第1列 第2列 … 第n 列

3.数组元素的存储地址(以行优先顺序计算,假设每个元素为d 个单元) (1)二维数组中a ij 的地址

LOC(a ij )= LOC(a 11)+[(i-1)*n+j-1]*d

在C (Visual C++)语言中,因数组下标从0起,故

LOC(a ij )=LOC(a 00)+(i*n+j)*d

(2)三维数组中a ijk 的地址(A mnp )

LOC(a ijk )= LOC(a 111)+ [(i-1)*n*p+(j-1)*p+(k-1)]*d

在Visual C++语言中,因数组下标从0起,故

LOC(a ijk )=LOC(a 000)+(i*n*p+j*p+k)*d

(3)对于一般的二维数组A[c 1 … d 1,c 2 … d 2]

LOC(a ij )=LOC(a c1c2)+[(i-c 1)*(d 2-c 2+1)+j-c 2]*d

5-1-3 特殊矩阵

矩阵在存储中常用二维数组,而对于一些特殊的矩阵,可将其按一定规律压缩存储在一维向量中,如sa[ ]中。

1.对称矩阵

(1)特点:在n 阶方阵A 中有a ij =a ji (0≤i ,j ≤n -1)。

(2)存储:按行优先的存储顺序为:a 00,a 10,a 11,a 21,a 22, … a n-1 0,a n-1 1 … a n-1 n-1 (3)元素的二维下标(i ,j)与其在一维向量中的位置k 的对应关系:

I=max(i ,j), J=min(i ,j) k=I*(I+1)/2+J

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

2.三角矩阵

(1)特点:n 阶方阵A 中,上三角或下三角(不包括主对角线)元素均为常数c 。

(2)存储:按行优先存放。 上三角矩阵的存储序列为:

下三角矩阵的存储序列为:

第行第行第行常数

(3)元素的二维下标(i,j )与其在一维向量中的位置k 的对应关系: 上三角矩阵:

⎩⎨

⎧+-++-=1)/2

(n *n i

j 1)/2i (2n *i k 下三角矩阵:

⎧+++=1)/2(n *n j

1)/2(i *i k 即有:LOC(a ij )=LOC(sa[k]) 3.对角矩阵

(1)特点:除对角线和其相邻两侧的若干条对角线上的元素之外,其余元素皆为零。 (2)存储:以3条带的带状矩阵为例,即主对角线两侧各有一条带的元素,见图5-1。

其存储特点为第一行和最后一行为两个元素,其他各行为3个元素。 a 00 a 01 a 10 a 11 a 12 a 21 a 22 a 23 … … …

a n-2n-3 a n-2n-2 a n-2n-1

a n-1n-2 a n-1n-1

图5-1 n ×n 的带状矩阵

(3)按行优先的存储序列为:

-3])

元素的二维下标(i,j)与其在一维向量中的位置k 的对应关系: k=3i -1+j -i +1=2i+j i ≤ j

i>j (常数c 的位置)

i ≤ j

i>j (常数c 的位置)

相关文档
最新文档