数据结构答案-第6章-多维数组和广义表学习指导
李春葆《数据结构教程》(第4版)课后习题-数组和广义表(圣才出品)
第6章数组和广义表1.简述数组属于线性表的原因。
答:数组可以看成是线性表在下述含义上的扩展:线性表中的数据元素本身也是一个线性表。
在n维数组中的每个数据元素都受着n个关系的约束,在每个关系中,数据元素都有一个后继元素(除去最后一个元素)和一个前驱元素(除去最前一个元素)。
因此,这n个关系中的任一关系,就其单个关系而言仍是线性关系。
例如,m×n的二维数组的形式化定义如下:2.n阶对称矩阵A的下三角元素存储在一维数组B中,则B包含多少个元素?答:B中包含n阶对称矩阵A的下三角和主对角线上的元素,其元素个数为1+2+…+n=(n(n+1))/2,所以B包含(n(n+1))/2个元素。
3.设有三对角矩阵A n×n(从A1,1开始),将其三对角线上元素逐行存于数组B [1..m]中,使B[k]=A i,j,求:(1)用i,j表示k的下标变换公式;(2)用k表示i,j的下标变换公式。
答:在三对角矩阵中,除了第一行和最后一行各有两个元素外,其余各行均有三个非零元素,所以共有3n-2个非零元素。
(1)主对角线左下角的对角线上的元素的下标有关系式:i=j+1,此时的k有:k=3(i-1)=2(i-1)+j主对角线上的元素的下标有关系式:i=j,此时的k有:k=3(i-1)+1=2(i-1)+j主对角线右上角的对角线上的元素的下标有关系式:i=j-1,此时的k有:k=3(i-1)+2=2(i-1)+j综合起来得到:k=2(i-1)+j(2)k与i,j的变换公式为:i=k/3+1;j=k-2(i-1)4.用十字链表表示一个有k个非0元素的m×n的稀疏矩阵,则其总的节点数为多少?答:该十字链表有一个十字链表头节点,MAX(m,n)个行、列头节点。
另外,每个非零元素对应一个节点,即k个元素节点,所以共有MAX(m,n)+k+1个节点。
5.设定二维整数数组B[0..m-1,0..n-1]的数据在行、列方向上都按从小到大的顺序排序,且整型变量x中的数据在B中存在。
数据结构(C语言版)(第2版)课后习题答案
数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案目录第1章绪论1 第2章线性表5 第3章栈和队列13 第4章串、数组和广义表26 第5章树和二叉树33 第6章图43 第7章查找54 第8章排序65 第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,。
},字母字符数据对象是集合C={‘A’,‘B’,。
,‘Z’,‘a’,‘b’,。
,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
第6章多维数组和广义表[51页]
6.3 特殊矩阵及其压缩存储 6.3.1 特殊矩阵
1.对称矩阵
若一个n阶方阵A中元素满足下列条件:
aij=aji 其中 0 ≤i, j≤n-1 , 矩阵。
则称A为对称
例如,图5-1是一个3*3的对称矩阵。
1 23 A= 2 5 4
6.1.2 多维数组在计算机的存放
怎样将多维数组中元素存入到计算机内存中呢?由于 计算机内存结构是一维的(线性的),因此,用一维 内存存放多维数组就必须按某种次序将数组元素排成 一个线性序列,然后将这个线性序列顺序存放在存储 器中 。
6.2 多维数组的存储结构
由于数组一般不作插入或删除操作,也就是说,一旦建 立了数组,则结构中的数组元素个数和元素之间的关系 就不再发生变动,即它们的逻辑结构就固定下来了,不 再发生变化。因此,采用顺序存储结构表示数组是顺理 成章的事了。本章中,仅重点讨论二维数组的存储,三 维及三维以上的数组可以作类似分析。
2.二维数组 矩阵是很多科学与工程计算中常见的数学模型,用高 级语言编程时,通常将矩阵描述为一个二维数组。二 维数组可以看成是向量的推广。
例如,设A是一个有m行n列的二维数组,则A可以 表示为:
`
a00 a01 ……
a0n-1
a10 a11 ……
a1n-1
…………………………. A=
a a m-1 0 m-1 1 ……
a a m-1 0 m-1 1 ……
am-1 n-1
2.地址计算
由于多维数组在内存中排列成一个线性序列,因此,若 知道第一个元素的内存地址,如何求得其它元素的内存 地址?对于二维数组,以行为主序的优先存储。 假设每个元素占c个存储单元,元素aij 的存储地址应为 第一个元素的地址加上排在aij 前面的元素所占用的单元 数,而aij 的前面有i行(0~i-1)共i×n个元素,而本行前面 又有j个元素,故aij的前面一共有i×n+j个元素,设a00的 内 存 地 址 为 LOC(a00) , 则 aij 的 内 存 地 址 为 LOC(aij)=LOC(a00)+(i×n+j)×c。
数据结构课后习题答案及解析第六章
第六章树和二叉树(下载后用阅读版式视图或web版式可以看清)习题一、选择题1.有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。
表示该遗传关系最适合的数据结构为( )。
A.向量B.树 C图 D.二叉树2.树最合适用来表示( )。
A.有序数据元素 B元素之间具有分支层次关系的数据C无序数据元素 D.元素之间无联系的数据3.树B的层号表示为la,2b,3d,3e,2c,对应于下面选择的( )。
A. la (2b (3d,3e),2c)B. a(b(D,e),c)C. a(b(d,e),c)D. a(b,d(e),c)4.高度为h的完全二叉树至少有( )个结点,至多有( )个结点。
A. 2h_lB.h C.2h-1 D. 2h5.在一棵完全二叉树中,若编号为f的结点存在右孩子,则右子结点的编号为( )。
A. 2iB. 2i-lC. 2i+lD. 2i+26.一棵二叉树的广义表表示为a(b(c),d(e(,g(h)),f)),则该二叉树的高度为 ( )。
A.3B.4C.5D.67.深度为5的二叉树至多有( )个结点。
A. 31B. 32C. 16D. 108.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。
A. 15B. 16C. 17D. 479.题图6-1中,( )是完全二叉树,( )是满二叉树。
..专业知识编辑整理..10.在题图6-2所示的二叉树中:(1)A结点是A.叶结点 B根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点(2)J结点是A.叶结点 B.根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点(3)F结点的兄弟结点是A.EB.D C.空 D.I(4)F结点的双亲结点是A.AB.BC.CD.D(5)树的深度为A.1B.2C.3D.4(6)B结点的深度为A.1B.2C.3D.4(7)A结点所在的层是A.1B.2C.3D.4..专业知识编辑整理..11.在一棵具有35个结点的完全二叉树中,该树的深度为( )。
李春葆《数据结构教程》(第4版)章节题库-数组和广义表(圣才出品)
第6章数组和广义表一、选择题1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13B.33C.18D.40【答案】B【解析】对于对称矩阵,a i,j=a j,i。
为了节省存储空间,为多个相同的元素只分配一个存储空间。
对于对称矩阵,元素下表之间的对应关系为:当i>=j时,k=i(i-1)/2+j -1;当i< =j 时,k=j(j-1)/2+i-1。
其中k相当于地址空间的标号,i为行号,j为列号。
因为第一个元素存储地址为1,所以最后计算的k需要加1。
所以a85的存储位置为8*(8-1)/2+5=33。
2.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。
A.BA+141B.BA+180C.BA+222D.BA+225【答案】B【解析】在计算中,可以考虑按照列存放时,A[5,8]在内存的位置,比较容易计算元素的首地址。
比如A[5,8]顺序存放时,它是第7*8+5=61个元素,由于首地址为BA,所以它的存储首地址为BA+(61-1)*3=180+BA。
3.数组通常具有的两种基本操作是()。
A.查找和修改B.查找和索引C.索引和修改D.建立和删除【答案】A【解析】数组中的元素是顺序存放的,通过下标可以很好地查找数组元素,同时通过对应的指针可以修改数组元素的值,因此数组通常具有的两种基本操作是查找和修改。
根据数组的性质,数组通常具有的两种基本运算是排序和查找。
4.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1..298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。
A.198B.195C.197【答案】B【解析】将对角矩阵a[i][j]存入b[k],三对角矩阵压缩地址计算公式如下:k=2i+j-2。
数据结构教程李春葆课后答案第6章数组和广义表
int length; }
//元素值 //重复元素的个数
如数组 A[]={1,1,1,5,5,5,5,3,3,3,3,4,4,4,4,4,4},共有 17 个元 素,对应的压缩存储 B 为:{1,3},{5,4},{3,4},{4,6}}。从中看出,如果重复元素 越多,采用这种压缩存储方式越节省存储空间。
6. 利用三元组存储任意稀疏数组 A 时,假设其中一个元素和一个整数占用的存储空间 相同,问在什么条件下才能节省存储空间。
答:设稀疏矩阵 A 有 t 个非零元素,加上行数 rows、列数 cols 和非零元素个数 nums (也算一个三元组),那么三元组顺序表的存储空间总数为 3(t+1),若用二维数组存储时占 用存储空间总数为 m×n,只有当 3(t+1)<m×n 即 t<m×n/3-1 时,采用三元组存储才能节省存 储空间。
解:对于稀疏矩阵三元组表 a,从 a.data[0]开始查看,若其行号等于列号,表示是一
个对角线上的元素,则进行累加,最后返回累加值。算法如下:
bool diagonal(TSMatrix a,ElemType &sum)
数据结构(数组和广义表)习题与答案
1、以行序优先顺序存储数组A[5][5];假定A[0][0]的地址为1000, 每个元素占4个字节,下标变量A[4][3]的地址是____。
A.1069B.1092C.1023D.1046正确答案:B2、数组a[1..6][1..5] (无0行0列)以列序优先顺序存储,第一个元素a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是____。
A.1040B.1026C.1046D.1038正确答案:A3、设有一个5行4列的矩阵A,采用行序优先存储方式,A[0][0]为第一个元素,其存储地址为1000,A[2][2]的地址为1040,则A[3][0]的地址为_________。
A.1048B.1024C.1096D.1060正确答案:A4、设有一个10行10列的矩阵A,采用行序优先存储方式,存储全部数据需要400个字节的空间。
如果A[0][0]为第一个元素,其存储地址为1000,则A[3][6]的地址为_________。
A.1036B.1144C.1014D.10565、设有一个10行10列的矩阵A,采用行序优先存储方式。
如果A[0][0]为第一个元素,其存储地址为1000,A[2][3]的存储地址为1069,则存储一个元素需要的单元数是_________。
A.4B.1C.2D.3正确答案:D6、不能够对数据元素进行随机访问的物理结构是_________。
A.三元组顺序表B.对称矩阵的压缩存储C.三对角矩阵的压缩存储D.数组的顺序存储正确答案:A7、对特殊矩阵采用压缩存储的目的主要是_________。
A.表达变得简单B.去掉矩阵中的多余元素C.对矩阵元素的存储变得简单D.减少不必要的存储空间正确答案:D8、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是_________。
A.nB.n(n+1)/2C.n2D.n(n+1)9、设10*10的对称矩阵下三角保存SA[1..55]中,其中A[1][1]保存在SA[1]中,A[5][3] 保存在SA[k]中,这里k等于_________。
广州大学松田学院6数据结构复习题-广义表-参考答案
6数据结构复习题(广义表)一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)n维的多维数组可以视为n-1维数组元素组成的线性结构。
(√)(2)稀疏矩阵中非零元素的个数远小于矩阵元素的总数。
(ㄨ)(3)上三角矩阵主对角线以上(不包括主对角线中的元素),均为常数C。
(√)(4)数组元素可以由若干个数据项组成。
(√)(5)数组的三元组表存储是对稀疏矩阵的压缩存储。
(ㄨ)(6)任何矩阵都可以进行压缩存储。
(ㄨ)(7)广义表是线性表的推广,所以广义表也是线性表。
(ㄨ)(8)广义表LS=(a0,a1,……a n-1),则a n-1是其表尾。
(√)(9)广义表((a,b),a,b)的表头和表尾是相等的。
(√)(10)一个广义表的表尾总是一个广义表。
二.填空题(1)多维数组的顺序存储方式有按行优先顺序存储和按列优先顺序存储两种。
(2)在多维数组中,数据元素的存放地址可以直接通过地址计算公式算出,所以多维数组是一种随机存取结构。
(3)在n维数组中的每一个元素最多可以有 n 个直接前驱。
(4)输出二维数组A[n][m]中所有元素值的时间复杂度为O(n*m) 。
(5)数组元素a[0..2][0..3]的实际地址上2000,元素长度是4,则LOC[1,2]= 2024 。
LOC[1,2]=2000+(1*4+2)*4(6)稀疏矩阵的三元组有 3 列。
(7)稀疏矩阵的三元组中第1列存储的是数组中非零元素所在的行数。
(8)n阶对称矩阵,如果只存储下三角元素,只需要 n(n-1)/2 个存储单元。
(9)稀疏矩阵A如下图所示,其非零元素存于三元组表中,三元组(4,1,5)按列优先顺序存储在三元组表的第 4 项。
A=稀疏矩阵A(10)稀疏疏矩阵的压缩存储方法通常有三元组表和十字链表两种。
(11)任何一个非空广义表的表尾必定是广义表(或子表)。
(12)tail(head((a,b),(c,d))= b 。
(13)设广义表((a,b,c)),则将c分离出来的运算是 head(tail(tail(head(L)))) 。
多维数组与广义表
…
假设数组各维的下界是1,按“行优先顺序”存储,假
设每个元素占用d个存储单元。
二维数组Amn, aij的地址计算函数为:
LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d
三维数组Amnp,aijk的地址计算函数为:
LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p +(k-1)]*d
5.2 矩阵的压缩存储
在编程时,简单而又自然的方法,是将矩阵描述为
一个二维数组。矩阵在这种存储表示之下,可以对 其元素进行随机存取。
但是在一些特殊矩阵中,非零元素呈某种规律分布
或者矩阵中有大量的零元素,如果仍用二维数组存, 会造成极大的浪费,尤其是处理高阶矩阵的时候。
为了节省存储空间, 我们可以对这类矩阵进行压缩
最基本的原理
Ai1…in的起始地 址 第一个元素 该元素前面 单位 = 〸 ╳ 的起始地址 的元素个数 长度
程序员试题
2006-1
对于二维数组a[0…4,1…5],设每个元素占1个存储单
元,且以行为主序存储,则元素a[2,1]相对于数组空 间起始地址的偏移量是___(40)___。 (40)A.5 B.10 C.15 D.25
2001
二维数组 X 的行下标范围是0~5,列下标范围是1~8,每
个数组元素占六个字节,则该数组的体积为__(6)__个字节, 若已知 X 的最后一个元素的起始字节地址为382,则 X 的 首地址(即第一个元素的起始字节地址)为 __(7)__,记为 Xd 。若按行存储,则 X{1,5] 的起始地址是 __(8)__, 结束字节 地址是 __(9)__。若按列存储,则 X[4,8]的起始字节地址为 __(10)__。 (6): A.210 B.240 C.288 D.294 (7): A.0 B.6 C.94 D.100 (8): A.Xd+24 B.Xd+72 C.Xd+78 D.Xd+144 (6)C (7)D (8)B (9)B (10)D (9): A.Xd+29 B.Xd+77 C.Xd+83
广义线性表——多维数组和广义表
第 4 章广义线性表——多维数组和广义表1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。
【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。
除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。
⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。
【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。
⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。
【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。
⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。
【解答】三元组顺序表,十字链表2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。
A 90B 180C 240D 540E 108F 114G 54H A[8][5] I A[3][10] J A[5][8] K A[4][9]【解答】D,E,K【分析】数组A为9行10列,共有90个元素,所以,存放A 至少需要90×6=540个存储单元,第8列和第5行共有18个元素(注意行列有一个交叉元素),所以,共占108个字节,元素A[8][5]按行优先存储的起始地址为d+8×10+5=d+85,设元素A[i][j]按列优先存储的起始地址与之相同,则d+j×9+i=d+85,解此方程,得i=4,j=9。
数据结构习题及答案与实验指导(数组和广义表)5
第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 22211n 1211 =⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫⎝⎛=其中2.数组的顺序存储方式(1)行优先顺序——将数组元素按行向量排列,即第i +1行紧接在第i 行后面。
广州大学松田学院6数据结构复习题-广义表-参考答案
6数据结构复习题(广义表)一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)n维的多维数组可以视为n-1维数组元素组成的线性结构。
(√)(2)稀疏矩阵中非零元素的个数远小于矩阵元素的总数。
(ㄨ)(3)上三角矩阵主对角线以上(不包括主对角线中的元素),均为常数C。
(√)(4)数组元素可以由若干个数据项组成。
(√)(5)数组的三元组表存储是对稀疏矩阵的压缩存储。
(ㄨ)(6)任何矩阵都可以进行压缩存储。
(ㄨ)(7)广义表是线性表的推广,所以广义表也是线性表。
(ㄨ)(8)广义表LS=(a0,a1,……a n-1),则a n-1是其表尾。
(√)(9)广义表((a,b),a,b)的表头和表尾是相等的。
(√)(10)一个广义表的表尾总是一个广义表。
二.填空题(1)多维数组的顺序存储方式有按行优先顺序存储和按列优先顺序存储两种。
(2)在多维数组中,数据元素的存放地址可以直接通过地址计算公式算出,所以多维数组是一种随机存取结构。
(3)在n维数组中的每一个元素最多可以有n 个直接前驱。
(4)输出二维数组A[n][m]中所有元素值的时间复杂度为O(n*m) 。
(5)数组元素a[0..2][0..3]的实际地址上2000,元素长度是4,则LOC[1,2]= 2024 。
LOC[1,2]=2000+(1*4+2)*4(6)稀疏矩阵的三元组有 3 列。
(7)稀疏矩阵的三元组中第1列存储的是数组中非零元素所在的行数。
(8)n阶对称矩阵,如果只存储下三角元素,只需要n(n-1)/2 个存储单元。
(9)稀疏矩阵A如下图所示,其非零元素存于三元组表中,三元组(4,1,5)按列优先顺序存储在三元组表的第 4 项。
A=稀疏矩阵A(10)稀疏疏矩阵的压缩存储方法通常有三元组表和十字链表两种。
(11)任何一个非空广义表的表尾必定是广义表(或子表)。
(12)tail(head((a,b),(c,d))= b 。
(13)设广义表((a,b,c)),则将c分离出来的运算是head(tail(tail(head(L)))) 。
数据结构答案-第6章-多维数组和广义表学习指导
数据结构答案-第6章-多维数组和广义表学习指导本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March第6章多维数组和广义表知识点分析1.多维数组概念多维数组是向量的推广,对于二维数组A m×n既可以看成m行向量组成的向量,也可以看成n行向量组成的向量。
多维数组在计算机中有两种存储形式:按行优先顺序存储和按列优先顺序存储。
2.多维数组的存储二维数组a ij的地址为:LOC(a ij) = LOC(a00) + ( i×n + j ) × d (0下标起始的语言)三维数组a ijk的地址为:LOC(a ijk)=LOC(a000)+( (i×n×p+ j×p +k) ×d (0下标起始的语言)d为每个数据元素占有的字节数。
3.特殊矩阵在矩阵中非零元素或零元素的分布有一定规律的矩阵称为特殊矩阵,如三角矩阵、对称矩阵、稀疏矩阵等。
当矩阵的阶数很大时,用普通的二维数组存储这些特殊矩阵将会占用很多的存储单元。
从节约存储空间的角度考虑,以下特殊矩阵的存储方法。
(1)对称矩阵对称矩阵是一种特殊矩阵,n阶方阵的元素满足性质:a ij=a ji(0≤i , j≤n-1)。
对称矩阵是关于主对角线的对称,因此只需存储上三角或下三角部分的数据即可。
(2)三角矩阵三角矩阵的特殊性是以主对角线划分矩阵。
下三角矩阵,主对角线以上均为同一个常数;上三角矩阵,主对角线以下均为同一个常数,可以采用压缩存储。
(3)稀疏矩阵在m*n的矩阵中有t个非零元素,且t远小于m×n,这样的矩阵称稀疏矩阵。
为了节约存储空间,稀疏矩阵中零元素无需存储,只需存储矩阵中的非零元素。
稀疏矩阵常用的有:三元组表存储、带行指针的链表存储、十字链表存储等存储方法。
4.广义表广义表是n(n≥0)个数据元素的有序序列,广义表的元素可以是单元素,也可以是一个广义表。
数据结构-数组和广义表作业解答
数组和广义表 作业4 单项选择题1.有一矩阵为A[-3:1,2:6],每个元素占一个存储单元,存储的首地址为100,以行序为主,则元素a -1,4的地址为( )。
A )111B )112C )113D )125【分析】对于二维数组A[c 1:d 1,c 2:d 2],设每个元素占用l 个存储单元,LOC(c 1,c 2)是第一个元素a c 1,c 2的存储位置,则按行存放时,a ij 的存储位置如下: LOC(i,j)=LOC(c 1,c 2)+[(d 2-c 2+1)(i-c 1)+(j-c 2)]l对于本题,c 1=-3,c 2=2,d 1=1,d 2=6,l =1,LOC(c 1,c 2)=100,所以元素a -1,4的地址为:LOC(-1,4)=100+[(6-2+1)*(-1-(-3))+(4-2)]*1=112。
【答案:B 】2.一n ×n 的三角矩阵A=[a ij ]如下:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡nn n n a a a a a a22211211 将三角矩阵中元素a ij (i ≤j)按行序为主序的顺序存储在一维数组B[1..n(n+1)/2]中,则a ij 在B 中的位置是( )。
A )(i-1)(2n+i)/2+i-j+1B )(i-1)(2n-i+2)/2+j-i+1C )(i-1)(2n-i)/2+j-iD )(i-1)(2n-i+2)/2+j-i 【分析】存储位置=n+(n-1)+…+(n -i+2)+i-j+1=(i-1)(2n-i+2)/2+j-i+1。
【答案:B 】3.广义表((a,b),(c,d))的表尾是( )。
(四川大学计算机学院2004年试题)A )(c,d)B )((c,d))C )(d)D )d【分析】广义表((a,b),(c,d))可看成是(d1,d2)所组成,其中d1=(a,b),d2=(c,d),所以表尾为(d2)=((c,d))。
【答案:B 】4.若广义表A 满足Head(A)==Tail(A),则A 为( )。
《数据结构与实训(第4版)(微课版)》 -第6章习题参考答案[5页]
第六章习题答案1.填空题(1) e=21∑=n i i v D 1)( (2) 21n(n – 1) (3)入度(4)先序 层次(5) n-1(6)O(n 2) O(elog 2e) kruskal(7)4(8)边的数目(9)n 2-e(10)n+12.判断题(1)×(2)√(3)√(4)×(5)√(6)√(7)×(8)×(9)√(10)×3.简答题(1)①②邻接矩阵:邻接表:③TD(V1)=2 TD(V2)=3 TD(V3)=2 TD(V4)=3 TD(V5)=2(2)邻接矩阵为:邻接表为:(3②若邻接矩阵A中的元素A[i][j]的值为非零,则顶点V i和V j之间有边相连③对于任意一个顶点i,它的度为邻接矩阵第i行(或第i列)的非零(或非∞)元素数目。
(4)题中无向图改为有向图。
①边(弧)数为邻接表中所有单链表的边结点数目。
②若第i个单链表中存在一个边结点,其adjvex域的值为j,则顶点V i和V j之间有边(弧)相连③对于任意一个顶点i,它的入度为所有单链表中adjvex域的值为i的边结点数目,它的出度为第i个单链表中边结点数目。
(5)①邻接表:②把题中V1改V0。
深度优先搜索:V0,V1,V3,V4,V7,V2,V5,V6广度优先搜索:V0,V1,V2,V3,V4,V5,V6,V7(6)①②③权值:1+2+2+4+5=14(7)题中图的顶点标记改为数字,如下图,且求从1到其它顶点的最短路径。
①②(8)V0,V4,152 3 04125 3 045,V1,V2,V3 V4,V5,V0,V1,V2,V3 V4,V0,V1,V2,V5,V3 V4,V0,V5,V1,V2,V3 4.(1)采用邻接表作为存储结构void dfs1(Adjlist g, int v){ int visited[N];ArcNode *stack[N],*p;int j,top=-1;for (j=1;j<=n;j++) visited[j]=0;printf(“%c”,g.vertex[v].data); //访问起始顶点visited[v]=1;p=g.vertex[v].firstarc;while ((p!=NULL)||(top>-1))while (p!=NULL){j=p->adjvex;if (visited[j]!=0) //顶点j被访问过p=p->nextarc; //继续找顶点i的下一个邻接点else{ printf(“%c”,g.vertex[j].data); //访问邻接顶点jvisited[j]=1; //做访问标记stack[++top]=p; //被访问过的顶点指针进栈p=g.vertex[j].firstarc; //沿着顶点j深度优先搜索if (top>-1) {p=stack[top--]; p=p->nextarc;}}}}(2)先建一个空的邻接矩阵,然后在邻接表上顺序地取每个单链表中的边结点,如果边结点不为空,则将邻接矩阵中对应元素置1。
数据结构教程李春葆课后答案第6章数组和广义表
3. 如果某个一维数组 A 的元素个数 n 很大,存在大量重复的元素,且所有元素值相同 的元素紧挨在一起,请设计一种压缩存储方式使得存储空间更节省。
答:设数组的元素类型为 ElemType,采用一种结构体数组 B 来实现压缩存储,该结构 体数组的元素类型如下:
struct { ElemType data;
A=(D,R)
其中:
D = { aij | 0≤i≤m-1,0≤j≤n-1} R = { ROW, = { <ai,j,ai+1,j> | 0≤i≤m-2,0≤j≤n-1} COL = { <ai,j,ai,j+1> | 0≤i≤m-1,0≤j≤n-2}
//行关系 //列关系
第 6 章 数组和广义表
教材中练习题及参考答案
1. 如何理解数组是线性表的推广。 答:数组可以看成是线性表在下述含义上的扩展:线性表中的数据元素本身也是一个 线性表。在d(d≥1)维数组中的每个数据元素都受着d个关系的约束,在每个关系中,数 据元素都有一个后继元素(除最后一个元素外)和一个前驱元素(除第一个元素外)。 因此,这 d 个关系中的任一关系,就其单个关系而言,仍是线性关系。例如,m×n 的 二维数组的形式化定义如下:
//返回假
else
//均不空的情况
{ if (g1->tag==0 && g2->tag==0)
//均为原子的情况
{ if (g1->val.data!=g2->val.data) //原子不相等
return false;
//返回假
return(Same(g1->link,g2->link)); //返回兄弟比较的结果
数据结构课后习题答案第六章
欢迎下载
6
-
9.已知信息为“ ABCD BCD CB DB ACB ”,请按此信息构造哈夫曼树,求出每一字符的最优编码。 10. 己知中序线索二叉树采用二叉链表存储结构,链结点的构造为:
_,双分支结点的个数为 ____, 3 分支结点的个数为 ____, C 结点的双亲结点为 ____ ,其孩子结点为 ____。
5. 一棵深度为 h 的满 k 叉树有如下性质:第 h 层上的结点都是叶子结点,其余各层上的每个结点都有
k 棵非空子树。
如果按层次顺序(同层自左至右)从 1 开始对全部结点编号,则:
7.二叉树的遍历分为 ____ ,树与森林的遍历包括 ____。 8.一棵二叉树的第 i(i>=1) 层最多有 ____ 个结点;一棵有 n(n>0) 个结点的满二叉树共有 ____ 个叶子和 ____个非终端结点。
9.在一棵二叉树中,假定双分支结点数为 5 个,单分支结点数为 6 个,则叶子结点为 ____个。
A. 逻辑 B.逻辑和存储 C.物理 D.线性 19.由权值分别是 8,7, 2, 5 的叶子结点生成一棵哈夫曼树,它的带权路径长度为
A. 23 B. 37 C. 46 D. 43 20.设 T 是哈夫曼树,具有 5 个叶结点,树 T 的高度最高可以是 ( )。
A.2 B . 3 C. 4 D. 5
()
6.在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树。
()
7.由于二叉树中每个结点的度最大为 2,所以二叉树是一种特殊的树。 8.二叉树的前序遍历序列中,任意一个结点均处在其子树结点的前面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【
第6章多维数组和广义表
知识点分析
1.多维数组概念
多维数组是向量的推广,对于二维数组A m×n既可以看成m行向量组成的向量,也可以看成n行向量组成的向量。
多维数组在计算机中有两种存储形式:按行优先顺序存储和按列优先顺序存储。
2.多维数组的存储
二维数组a ij的地址为:LOC(a ij) = LOC(a00) + ( i×n + j ) × d (0下标起始的语言)
三维数组a ijk的地址为:LOC(a ijk)=LOC(a000)+( (i×n×p+ j×p +k) ×d (0下标起始的语言)
d为每个数据元素占有的字节数。
…
3.特殊矩阵
在矩阵中非零元素或零元素的分布有一定规律的矩阵称为特殊矩阵,如三角矩阵、对称矩阵、稀疏矩阵等。
当矩阵的阶数很大时,用普通的二维数组存储这些特殊矩阵将会占用很多的存储单元。
从节约存储空间的角度考虑,以下特殊矩阵的存储方法。
(1)对称矩阵
对称矩阵是一种特殊矩阵,n阶方阵的元素满足性质:a ij=a ji(0≤i , j≤n-1)。
对称矩阵是关于主对角线的对称,因此只需存储上三角或下三角部分的数据即可。
(2)三角矩阵
三角矩阵的特殊性是以主对角线划分矩阵。
下三角矩阵,主对角线以上均为同一个常数;上三角矩阵,主对角线以下均为同一个常数,可以采用压缩存储。
(3)稀疏矩阵
在m*n的矩阵中有t个非零元素,且t远小于m×n,这样的矩阵称稀疏矩阵。
为了节约存储空间,稀疏矩阵中零元素无需存储,只需存储矩阵中的非零元素。
稀疏矩阵常用的有:三元组表存储、带行指针的链表存储、十字链表存储等存储方法。
@
4.广义表
广义表是n(n≥0)个数据元素的有序序列,广义表的元素可以是单元素,也可以是一个广义表。
由于广义表的元素有两种形式,所以其结点的存储形式也有两种:
(1)表结点由标志域、表头指针域、表尾指针域组成。
(2)原子结点由标志域和值域组成。
5.广义表与线性表的区别和联系
线性表是具有相同类型的n个数据元素的有限序列,记为a1、a2、a3、……、a n。
广义表也是n个数据元素的有限序列,记为a1、a2、a3、……、a n。
线性表中的元素必须具有相同的类型,而广义表中的成员,既可以是单个元素(原子),也可以是一个广义表(子表)。
当广义表中的每一个a i元素都是数据元素,且具有相同类型时,则它就是一个线性表,因此可以说广义表是线性表的一种推广,或者说线性表是广义表的一个特例。
典型习题分析
【例1】设二维数组A5×6的每个元素占4个字节,存储器按字节编址。
已知A的起始地址为2000,计算:
¥
(1)数组的大小
(2)A的终端结点a45的存储地址
(3)按行优先顺序存储时,a25的存储地址
(4)按列优先顺序存储时,a25的存储地址
答:
(1)数组的大小(即数组A共占多少字节):5×6×4=120B。
(2)一个结点a ij的存储地址是该结点所占用的存储空间的第1个字节的地址(即起始地址),它等于:基地址+排在a ij之前的结点个数×每个结点所占用的字节数。
a45的起始地址:LOC(a45)=2000+(4×6+5)×4=2116
、
(3)在按行优先顺序存储时,排在a ij之前的结点的个数为:在前i行(即0~i-1行)上共有i×n个结点,在第i行上a ij之前有j个结点(0~j-1列)。
所以按行优先存储的地址计算公式为: LOC(a ij)= LOC(a00)+(i×n+j)×d
LOC(a25)= 2000+(2×6+5)×4=2068
(4)在按列优先顺序存储时,排在a ij之前的结点的个数为:在前j列(即0~j-1列)上共有j×m个结点,在第j列上a ij之前有i个结点(0~i-1行)。
所以按列优先存储的地址计算公式为: LOC(a ij)= LOC(a00)+(j×m+i)×d
LOC(a25)=2000+(5×5+2)×4=2108
【例2】特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存储功能为什么
答:对于像三角矩阵等特殊矩阵由于压缩存储时将其存储在一个线性数组向量中,矩阵元素a ij的下标i,j与它在向量中的对应元素b k下标k有一对应关系,故不会失去随机存储功能。
而像稀疏矩阵,其压缩存储的方式是将其非零元素存储在一个三元组中,以三元组数组a[k]形式存储,矩阵元素a ij下标i,j与数组中对应元素a[k]行下标k无对应关系,故失去随机存储功能。
【例3】求矩阵的转置矩阵
分析:对于一个m×n的矩阵A mn,其转置矩阵是一个n×m的矩阵B nm,且B[i][j]=A[j][i],{
0≤i n,0≤i m。
其函数如下:
void trs(A,B)
maxix A,B;
{ int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
B[j][i]=A[i][j];
}
…
【例4】求两个矩阵的乘
分析:设两个矩阵相乘:C=A×B,
其中A是一个m×n的矩阵,B是一个n×k的矩阵,则C为一个m×k的矩阵。
其函数如下:void mut(C,A,B)
maxix A,B,C;
{ int i,j,k;
for (i=0;i<m;i++)
for (j=0;j<k;j++)
}
{ C[i][j]=0;
for (k=0;k<n;k++)
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}
}
【例5】若矩阵A m×n中存在一个元素a ij,满足a ij是第i行最小的元素,且是第j列最大的元素,则称a ij是矩阵A的鞍点,请编写一个算法,找出矩阵A的所有鞍点。
分析:找矩阵A的所有鞍点的基本思想是:先逐行找出本行值最小的元素,确定其所在的列,并在此列中选值最大的元素,若两者值相等,即选中一个鞍点。
void Spoint(int *a,int m,int n)
$
{ int i,j,k,c,max,min,r=0;
for (i=0;i<m;i++)
{ min=a[i][0];
、
0’
(
五.编程题答案
(1)【程序代码】
#include ""
#define ERROR –99999
typedef struct
{ int row;
int col;
int data;
$
}Triple;
int MDSum(Triple *a)
{ int i;
int sum=0;
if (a[0].row!=a[0].col) return ERROR;
for (i=1;i<=a[0].data;i++) { if (a[i].row==a[i].col) -
sum+=a[i].data; }
return sum;
}
(2)分析:设j 为原子个数,则求广义表中原子元素个数的算法可递归定义如下:
LS 为空
表尾原子元素个数+1
LS 非空且表头为原子元素
$
表头子表原子元素个数+表尾原子元素个数+1 LS 非空且表头子表
【程序代码】
int atomnum(Gnode *head) {
if (head==NULL) return 0; if (head->tag==0)
return(atomnum(head->next)+1); else
return(atomnum(head->next)+atomnum(head->); } (3)【程序代码】
int maxele(Gnode *head) {
int m=0,a; while(head) {
if (head->tag==1) { a=maxele(head->; if (a>m) m=a; } else
if (head->>m) m=head->; head=head->next; }
return m; }
j=。