
数据结构(本)课程辅导与练习-第5章 第5章数组和广义表 数组和广义表都是特殊的线性表。也是牧常用的数需结构类型。 二教、为、广医手子在 表头、表尾 a6R哈t-专元 素。一数的不元素道过不问的下标标识 2二套数超人可视为由个行向组成的向,度白个列有程组成的向。 n个列向量 维数组中的每个元素氏属于第1行的行向量,又属于第」列的列向华。 3.多维教组 数组A可视为以二雏数组为数元素的向量。四维数组可视为以三维组为 数据元 三维数组中的每个元素都后于三个向量。四鉴数组中的每个元素都属于四个向 量… 4数组的顺序存储方式 非的,多瓣数组的元素应排线性序列后存人存储 不做插入和制除操作,即结构中元素个数和元素何关系不变化。一般采用顺序存修 (1)行优先顺序 将数组元素按行向录排列,第1个行向量紧接在第i个行向后面
1 数据结构(本)课程辅导与练习-第 5 章 第 5 章 数组和广义表 数组和广义表都是特殊的线性表,也是较常用的数据结构类型。 一、相关术语 数组、二维数组、特殊矩阵、对称矩阵、对角矩阵、稀疏矩阵、广义表、原子、子表、 表头、表尾 二、数组 1.数组(向量)——常用数据类型 一维数组(向量)是存储于计算机的连续存储空间中的多个具有统一类型的数据元 素。同一数组的不同元素通过不同的下标标识。 (a1,a2,…,an) 2.二维数组 二维数组 Amn 可视为由 m 个行向量组成的向量,或由 n 个列向量组成的向量。 二维数组中的每个元素 aij 既属于第 i 行的行向量,又属于第 j 列的列向量。 3.多维数组 三维数组 Amnp 可视为以二维数组为数据元素的向量。四维数组可视为以三维数组为 数据元素的向量…… 三维数组中的每个元素 aijk 都属于三个向量。四维数组中的每个元素都属于四个向 量…… 4.数组的顺序存储方式 由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。 数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。一般采用顺序存储 方法表示数组。 (1)行优先顺序 将数组元素按行向量排列,第 i+1 个行向量紧接在第 i 个行向量后面

【例】二推数组A的按行优先存铺的线性序列为 a,1,“,n1.“,4“,,e,4,- 注意: PASC4L和C语言中,双组按行优先顺序存储 (2)列优先顺序 将数组元素按列向量抖列。第+!个列向量紧接在第个列向量后面, 【例】二推数组的核列优先存销的线性序列为: a,n,,8naa,“,e“;am,“, 注意: 家RN语言中,量组按列优先顺序存储: 5,数姐元素的地址计算公式 (1)一推数组元素地址的计算 在C语言中,数组的下标从0开始,若知道元素a[0)的存储地址是10C(A[0们), 每个数组元素占R个存储单元,由于元素[]是数组元素的第+1个元素,它之前有1个 元素,而每个元素占R个存绪单元,因此可求得数组元素[们的存储地址为: LOC (a[i])-LOC(a[o]+i+R) 或写成 L0C(a.)=0C(a-i*0 若数组的下标从1开始,则一堆量组的陆址计算公式为: LOC (a[i])LOC(a[o]+(i-1)*R 或写成 0C(a)=0C(a(1-1)) 2)二推数组元素地址的计算 对于一个二排数组a[[n],知道第一数组元素的存储地灶是OC([O[0]》(数组下 标从0开始),每个数组元素占R个存储单元,元素a[i】[山]位于数组中第+1行,勇+1列, 在它前面有1行个元素,共占用1和州个存储单元。在第+1行上,[1】[山】前面共有j个 元素,因此共占用了嫩个存储单元,所以可求得元素a[】[】的地址0C(A[1】[】)为 LOC (a[i]])LOC (a[o][0])+(i*m+j)*R 或写成L0C(a)·10C(at(i知+j)R) 若数组下标从1开始,数组元素8,的腹面有-1行,每一行的元素个数为,在第1行 中a,的前面有一1数据元素,则二维数组的地址计算公式为: L0c(a[i][j])=oC(a[0][0])+((i-1)n+jr1)*R 或写成 LOC (a)LOC(au+((i-1)*n+j-1)*R 三、特殊矩阵 所谓特矩库是指非零元素或零元素的分布有一定线律的矩阵。常见的有对称矩库、 三角矩阵和对角矩降等。 1,对称矩阵 (1)对称库 在个喻方阵A中,若元素满足下述性质: aai0sijen-1 则称A为对称矩阵。 【侧】下图便是一个5阶对称矩阵
2 【例】二维数组 Amn 的按行优先存储的线性序列为: a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn 注意: PASCAL 和 C 语言中,数组按行优先顺序存储。 (2)列优先顺序 将数组元素按列向量排列,第 i+1 个列向量紧接在第 i 个列向量后面。 【例】二维数组 Amn 的按列优先存储的线性序列为: a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn 注意: FORTRAN 语言中,数组按列优先顺序存储。 5.数组元素的地址计算公式 (1)一维数组元素地址的计算 在 C 语言中,数组的下标从 0 开始,若知道元素 a[0]的存储地址是 LOC(A[0]), 每个数组元素占 R 个存储单元,由于元素 a[i]是数组元素的第 i+1 个元素,它之前有 i 个 元素,而每个元素占 R 个存储单元,因此可求得数组元素 a[j]的存储地址为: LOC(a[i])= LOC(a[0]+i*R) 或写成 LOC(ai)= LOC(a0+i*R) 若数组的下标从 1 开始,则一维数组的地址计算公式为: LOC(a[i])= LOC(a[0]+(i-1)*R) 或写成 LOC(ai)= LOC(a0+(i-1)*R) (2)二维数组元素地址的计算 对于一个二维数组 a[m][n],知道第一数组元素的存储地址是 LOC(a[0][0])(数组下 标从 0 开始),每个数组元素占 R 个存储单元,元素 a[i][j]位于数组中第 i+1 行,第 j+1 列, 在它前面有 i 行个元素,共占用 i*n*R 个存储单元。在第 i+1 行上,a[i][j]前面共有 j 个 元素,因此共占用了 j*R 个存储单元,所以可求得元素 a[i][j]的地址 LOC(A[i][j])为: LOC(a[i][j])= LOC(a[0][0])+(i*n+j)* R 或写成 LOC(aij)= LOC(a00+(i*n+j)*R) 若数组下标从 1 开始,数组元素 aij 的前面有 i-1 行,每一行的元素个数为 n,在第 i 行 中 aij 的前面有 j-1 数据元素,则二维数组的地址计算公式为: LOC(a[i][j])= LOC(a[0][0])+((i-1)*n+j-1)* R 或写成 LOC(aij)= LOC(a11+((i-1)*n+j-1)* R 三、特殊矩阵 所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵。常见的有对称矩阵、 三角矩阵和对角矩阵等。 1.对称矩阵 (1)对称矩阵 在一个 n 阶方阵 A 中,若元素满足下述性质: aij=aji 0≤i,j≤n-1 则称 A 为对称矩阵。 【例】下图便是一个 5 阶对称矩阵

51 3 7 5 0 8 0 0 1 8 9 2 6 3 0 2 5 7 0 6 1 3 个阶的小称: (2)对称矩阵的压增存销 对称矩库中的元素关于主对角线对称,故具要存储矩阵中上三角或下三角中的元煮, 让每两个对称的元素共享一个存储空间。这样,能节约近一半的存储空间。 ①按”行优先顺序“存储主对角能(包括对角线)以下的元素 Ln-1.0 ie-LI a-L.2 Re L.al 对系更两的行优先存模 即按%a,,,4L“,次序存枚在一个向量0.,■(n+l)/2-】 中(下三角矩库中,元素总数为m(n+1)/2), 其中: sa【0]=w, 5[1】=as, san(n+1)/2-l]-a. ②元素u的存放位置 4u元素前有1行,一共有:1×(行+1)/2个元素: 在第1行上,a之前恰有j个元素(即a:a:…,a,因此有: sa[i×(i+1)/2+j]-au ③au和sak]之间的对应关系: i+1 2+当i之时,a,在下三角矩阵中 U+D+当:<时a,在上三角矩阵中 2 注意:若数组下标从】开始。则a,和sa[k]之间的对应关系为:
3 (2)对称矩阵的压缩存储 对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素, 让每两个对称的元素共享一个存储空间。这样,能节约近一半的存储空间。 ①按"行优先顺序"存储主对角线(包括对角线)以下的元素 即按 a00,a10,a11,……,an-1,0,an-1,1…,an-1,n-1 次序存放在一个向量 sa[0..n(n+1)/2-1] 中(下三角矩阵中,元素总数为 n(n+1)/2)。 其中: sa[0]= a00 , sa[1] = a10 , ……, sa[n(n+1)/2-1]= an-1,n-1 ②元素 aij 的存放位置 aij 元素前有 i 行,一共有:i×(i+1)/2 个元素; 在第 i 行上,aij之前恰有 j 个元素(即 ai0,ail,…,ai,j-1),因此有: sa[i×(i+1)/2+j]= aij ③aij 和 sa[k]之间的对应关系: + + + + = 当 时 在上三角矩阵中 当 时 在下三角矩阵中 ij ij i i j a j j j i j a i i k 2 ( 1) , 2 ( 1) 注意:若数组下标从 1 开始,则 aij 和 sa[k]之间的对应关系为:

[=》+当≥时,a,在下三角矩阵中 k= U-D+i当i<时a,在上三角矩阵中 2.三角矩阵 (1)三角矩库的划分 以主对角线划分,三角矩阵有上三角矩库和下三角矩库两种。 ①上三角矩库 如下图)所示,它的下三角(不包括主角战)中的元素均为常数c, ②下三角矩库 与上三角矩阵相反,它的主对角线上方均为常数©,如下图()所示。 注意: 在多数情况下,三角矩阵的常数©为零, aeo a01... 0-1 01.4 444404444444”4 0-l.1J Larl.t al.I... aml.nl ()上三角矩 )下三角矩程 三角矩殊 (2)三角更阵的压第存储 三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有×(m+1)/2 个,因此。三角矩降可压缩存储到向量sa[0,n+1)/)]中,其中c存放在向量的最后 一个分量中。 下三角矩阵中a,和s]之间的对应关系 [+山+当≥时 2 n+1) 2 +当<时 四、稀硫矩阵 设阵A中有s个非零元素,若s远运小于电阵元素的总数(即cm×,则称A为 稀硫矩库。 1,稀硫矩阵的压增存储 为了节省存储单元:可只存储非零元素。由于非零元素的分布一般是没有规律的,因此 在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能远速确定一个非零元 素是矩阵中的哪一个元素。稀陵矩阵的压增存储会失去随机存取功能。 其中每一个非零元素所在的行号、列号和值组成一个三元组(,j,小,并由此三元组 隆一确定。 稀硫矩阵进行压缩存储通常有两类方法顺序存储和链式存储。 2,三元组表
4 + − + − = 当 时 在上三角矩阵中 当 时 在下三角矩阵中 ij ij i i j a j j j i j a i i k 2 ( 1) , 2 ( 1) 2.三角矩阵 (1)三角矩阵的划分 以主对角线划分,三角矩阵有上三角矩阵和下三角矩阵两种。 ①上三角矩阵 如下图(a)所示,它的下三角(不包括主角线)中的元素均为常数 c。 ②下三角矩阵 与上三角矩阵相反,它的主对角线上方均为常数 c,如下图(b)所示。 注意: 在多数情况下,三角矩阵的常数 c 为零。 (2)三角矩阵的压缩存储 三角矩阵中的重复元素 c 可共享一个存储空间,其余的元素正好有 n×(n+1)/2 个,因此,三角矩阵可压缩存储到向量 sa[0..n(n+1)/2]中,其中 c 存放在向量的最后 一个分量中。 下三角矩阵中 aij 和 sa[k]之间的对应关系 + + + + = 当 时 当 时 i i j n n j i j i i k 2 ( 1) 2 ( 1) 四、稀疏矩阵 设矩阵 Amn 中有 s 个非零元素,若 s 远远小于矩阵元素的总数(即 s<<m×n),则称 A 为 稀疏矩阵。 1.稀疏矩阵的压缩存储 为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此 在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元 素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。 其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,aij),并由此三元组 惟一确定。 稀疏矩阵进行压缩存储通常有两类方法:顺序存储和链式存储。 2.三元组表

将表示稀疏矩阵的非零元素的三元组按行优为成列优先)的顺序排以跳过零元素),并 禁次存放在向量中,这种稀疏矩阵的顺序存储结构称为三元组表。 注意: 以下的讨论中。均假定三元组是被行优先顺序排列的。 【例】下图)所示的稀疏电阵A的三元组表表示见图b) 「000220015 0 10 3 22 0 6 0110 0170 15 0 0 2 -600 3 17 0 0 0039 12 3 -6 9100000 (5] 39 0028000● 6 4 0 91 28 是阵M及其三元相顺序表 下面讨论压缩存储结构上矩阵的转置运算 一个m×n的矩阵A,它的转置矩阵B是一个nXn的是阵,且: A[i][】-8[j1[i].0≤im,0≤jn, 即A的行是B的列,A的列是B的行。 ①三元组表表示的矩阵转置的思想方法 第一步!根据A矩阵的行数,列数和非零元总数确定B矩阵的列数、行数和非零元总 登。 第二步:当三元组表非空(A矩阵的非零元不为0)时,根据A矩阵三元组表的结点空 间a(以下简称为三元组表),将A的三元组表出da置换为B的三元组表卜>d编a。 @三元组表的转量 方法一:简单地交换daa中i和j中的内容,得到按列优先顺序存储倒b>da 再将一>dat。重排成按行优先展序的三元组表。 方法二:由于A的列是B的行,因此,按a>血a的列序转置,所得到的转置矩阵B 的三元组表->data必定是按行优先存放的。 按这种方法设计的算法,其基本思是是:对A中的每一列co】(0≤col≤->n-I),通 过从头至尾扫描三元组表>ata,找出所有列号等于col的那些三元组,将它们的行号和 列号互换后依次放人一)ata中,即呵得到B的按行优先的压缩存贮表示 五、广义表 广义表山量,又称列表)是线性表的推广。即广义表中放松对表元素的原子限制,容许 它们具有其自身结构。 1,广义表定义 广义表是倒心0个元素山,。,高:·a的有限序列。 其中: ①a-或者是原子或者是一个广义表. 5
5 将表示稀疏矩阵的非零元素的三元组按行优先(或列优先)的顺序排列(跳过零元素),并 依次存放在向量中,这种稀疏矩阵的顺序存储结构称为三元组表。 注意: 以下的讨论中,均假定三元组是按行优先顺序排列的。 【例】下图(a)所示的稀疏矩阵 A 的三元组表表示见图(b) 矩阵 M 及其三元组顺序表 下面讨论压缩存储结构上矩阵的转置运算 一个 m×n 的矩阵 A,它的转置矩阵 B 是一个 n×m 的矩阵,且: A[i][j]=B[j][i],0≤idata 置换为 B 的三元组表 b->data。 ②三元组表的转置 方法一:简单地交换 a->data 中 i 和 j 中的内容,得到按列优先顺序存储倒 b->data; 再将 b->data 重排成按行优先顺序的三元组表。 方法二:由于 A 的列是 B 的行,因此,按 a->data 的列序转置,所得到的转置矩阵 B 的三元组表 b->data 必定是按行优先存放的。 按这种方法设计的算法,其基本思想是:对 A 中的每一列 col(0≤col≤a->n-1),通 过从头至尾扫描三元组表 a->data,找出所有列号等于 col 的那些三元组,将它们的行号和 列号互换后依次放人 b->data 中,即可得到 B 的按行优先的压缩存贮表示。 五、广义表 广义表(Lists,又称列表)是线性表的推广。即广义表中放松对表元素的原子限制,容许 它们具有其自身结构。 1.广义表定义 广义表是 n(n≥0)个元素 a1,a2,…,ai,…,an 的有限序列。 其中: ①ai--或者是原子或者是一个广义表。 i j v [0] 0 3 22 [1] 0 6 15 [2] 1 1 11 [3] 1 5 17 [4] 2 3 -6 [5] 3 5 39 [6] 4 0 91 [7] 5 2 28 0 0 28 0 0 0 0 91 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 6 0 0 0 0 11 0 0 0 17 0 0 0 0 22 0 0 15 −

②广义表通常记作: 5,由,,a,…,小 @s是广义表的名字,n为它的长度, ①若a是广义表,则称它为s的子表 注意, ①广文表通常用圆括号括起来,用逼号分隔中的元素, ②为了区分原子和广义表,书写时用大写字母表示广义表,用小写字母表示原子。 @若广义表L5非空(2,则司是5的表头,其余元素组成的表(,,,)称为 Ls的表尾. ④广复表是递归定复的 2,广义表表示 (1)广文表常用表示 ①E0 E是一个空表,其长度为0, ②La,b) L是长度为2的广义表,它的两个元素都是原子,因此它是一个线性表 ③A=x,1=(X,(a,b) A是长度为2的广义表,第一个元素是原子x。第二个元素是子表L。 ①BA,yx,a,b.y) B是长度为2的广义表,第一个元素是子表A,第二个元素是原子y。 回CA,B-(x。a,b》,x,(a,b,y0 C的长度为2,两个元素都是子表。 D-(a.D-(a.(a.(.))) D的长度为2,第一个元需是原子,第二个元素是D自身,展开后它是一个无限的 广义表。 (2)广文表的深度 一个表的深度”是指表展开后所含括号的层数。 【例】表L、A、B、C的深度为分别为1,2、3、4,表D的深度为m。 (3)带名字的广义表表示 如果规定任何表都是有名字的,为了既表明每个表的名字。又说明它的组成,则可 以在每个表的前面冠以该表的名字,于是上例中的各表又可以写成: ①E0 ②L(a,b) ③A(x,l.(a,b) ④B(A(x,L(a,b)),y) C(A(x.I(a.b)).B(A(x.L(a.b)).y)) 8Da,Da,D-》 3.广义表运算 由于广义表是对线性表和树的推了广,并且具有共享和递归特性的广义表可以和有向团(见 第7章)建立对应,因此广义表的大部分运算与这些数据结构上的运算类似。 在此,只时论广义表的两个特妹的基本运算:取表头head(Ls)和取表尾ai1Ls), 根据表头、表尾的定义可知:任何一个丰空广文表的表头是表中第一个元素,它可 6
6 ②广义表通常记作: Ls=( a1,a2,…,ai,…,an)。 ③Ls 是广义表的名字,n 为它的长度。 ④若 ai 是广义表,则称它为 Ls 的子表。 注意: ①广义表通常用圆括号括起来,用逗号分隔其中的元素。 ②为了区分原子和广义表,书写时用大写字母表示广义表,用小写字母表示原子。 ③若广义表 Ls 非空(n≥1),则 al是 LS 的表头,其余元素组成的表(a2,a3,…,an)称为 Ls 的表尾。 ④广义表是递归定义的 2.广义表表示 (1)广义表常用表示 ① E=() E 是一个空表,其长度为 0。 ② L=(a,b) L 是长度为 2 的广义表,它的两个元素都是原子,因此它是一个线性表 ③ A=(x,L)=(x,(a,b)) A 是长度为 2 的广义表,第一个元素是原子 x,第二个元素是子表 L。 ④ B=(A,y)=((x,(a,b)),y) B 是长度为 2 的广义表,第一个元素是子表 A,第二个元素是原子 y。 ⑤ C=(A,B)=((x,(a,b)),((x,(a,b)),y)) C 的长度为 2,两个元素都是子表。 ⑥ D=(a,D)=(a,(a,(a,(…)))) D 的长度为 2,第一个元素是原子,第二个元素是 D 自身,展开后它是一个无限的 广义表。 (2)广义表的深度 一个表的"深度"是指表展开后所含括号的层数。 【例】表 L、A、B、C 的深度为分别为 1、2、3、4,表 D 的深度为∞。 (3)带名字的广义表表示 如果规定任何表都是有名字的,为了既表明每个表的名字,又说明它的组成,则可 以在每个表的前面冠以该表的名字,于是上例中的各表又可以写成: ①E() ②L(a,b) ③A(x,L(a,b)) ④B(A(x,L(a,b)),y) ⑤C(A(x,l(a,b)),B(A(x,L(a,b)),y)) ⑥D(a,D(a,D(…))) 3.广义表运算 由于广义表是对线性表和树的推广,并且具有共享和递归特性的广义表可以和有向图(见 第 7 章)建立对应,因此广义表的大部分运算与这些数据结构上的运算类似。 在此,只讨论广义表的两个特殊的基本运算:取表头 head(Ls)和取表尾 tail(Ls)。 根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可

以是原子,也可以是子表,而其表尾必定是子表。 【例】 hea(L)-=a.tail(L)-(b) head B)A.tail(B(y) 由于L)是非空表,可雅柒分解得到1 head(tail(L))=b.tail(tail(L))=() 对非空表A和(y),也可雕线分解。 六、练习题 单项选择题 1.一维数组A采用顺序存储结构。每个元素占用6个字节,第6个元素的存错地址为 100,则该数组的首地址是《)。 A.64 B.28 c.70 D.90 2.稀疏矩阵采用压缩存储的目的主煲是(): A,表达变得简单 B,对矩阵元素的存取变得简单 C.去掉矩阵中的多余元素 D.。减少不必要的存储空间的开销 3.一个妻空广义表的表头〔 )。 A.不可能是原子 B。只能是子表 C.只能是原子 D.可以是子表或原子 4,常对数组进行的两种基本操作是( A。建立与酬除 B。索引与、和修改 C.查找和修以 D。查找与素引 5.设二维数组A56)按行优先顺序存储在内存中,己知A0心起始地址为1000,每 个数组元素占用5个存储单元,则元素4[4]的地址为《): A.1140 B.1145C.1120 D.1125 6.设有一个20阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序 存绪到一维数组B中(数组下标从1开始)》,则矩阵中元素在一维数组B中的下标是 ). A.41 B.32 C.18 D.38 7.一个非空广义表的表头(》。 A,不可能是子表 B,只能是子表 C,只能是原子 D,可以是子表成原子 练习题答案 单项选释题 1.C2.D3.D4.C6.A6.D7.D
7 以是原子,也可以是子表,而其表尾必定是子表。 【例】 head(L)=a, tail(L)=(b) head(B)=A, tail(B)=(y) 由于 tail(L)是非空表,可继续分解得到: head(tail(L))=b, tail(tail(L))=() 对非空表 A 和(y),也可继续分解。 六、练习题 单项选择题 1.一维数组 A 采用顺序存储结构,每个元素占用 6 个字节,第 6 个元素的存储地址为 100,则该数组的首地址是( )。 A.64 B.28 C.70 D.90 2.稀疏矩阵采用压缩存储的目的主要是( )。 A.表达变得简单 B.对矩阵元素的存取变得简单 C.去掉矩阵中的多余元素 D.减少不必要的存储空间的开销 3.一个非空广义表的表头( )。 A.不可能是原子 B.只能是子表 C.只能是原子 D.可以是子表或原子 4.常对数组进行的两种基本操作是( )。 A.建立与删除 B.索引与、和修改 C.查找和修改 D.查找与索引 5. 设二维数组 A[5][6]按行优先顺序存储在内存中,已知 A[0][0] 起始地址为 1000,每 个数组元素占用 5 个存储单元,则元素 A[4][4]的地址为( )。 A.1140 B.1145 C. 1120 D.1125 6.设有一个 20 阶的对称矩阵 A,采用压缩存储的方式,将其下三角部分以行序为主序 存储到一维数组 B 中(数组下标从 1 开始),则矩阵中元素 a9,2 在一维数组 B 中的下标是 ( )。 A.41 B.32 C.18 D.38 7.一个非空广义表的表头( )。 A.不可能是子表 B.只能是子表 C.只能是原子 D.可以是子表或原子 练习题答案 单项选择题 1.C 2.D 3.D 4.C 5.A 6.D 7.D