数据结构5
数据结构第5章 串和广义表
5.1 串的定义和基本运算
• (4)串的连接StrCat(S,T)。 • 初始条件:串S和T存在。 • 操作结果:将串T的值连接在串S的后面。 • (5)求子串SubString(Sub,S,pos,len)。 • 初始条件:串S存在,1≤pos≤StrLength(S)且
1≤len≤StrLength(S)-pos+1。 • 操作结果:用Sub返回串S的第pos个字符起长度为len的
1≤len≤StrLength(S)-pos+1。 • 操作结果:从串S中删除第pos个字符起长度为len的子串。 • (9)串的替换StrReplace(S,T,V)。 • 初始条件:串S,T和V存在,且T是非空串。 • 操作结果:用V替换串S中出现的所有与T相等的不重叠子
串。 • (10)判断串空StrEmpty(S)。 • 初始条件:串S存在。 • 操作结果:若串S为空串,则返回1;否则返回0。
• (1)非紧凑存储。设串S="Hello boy",计算机字长为32 位(4个Byte),用非紧凑格式一个地址只能存一个字符, 如图5-2所示。其优点是运算处理简单,但缺点是存储空 间十分浪费。
• (2)紧凑存储。同样存储S="Hello boy",用紧凑格式一 个地址能存四个字符,如图5-3所示。紧凑存储的优点是 空间利用率高,缺点是对串中字符处理的效率低。
•}
5.3 串的基本运算的实现
• (3)求子串操作。求串S从第pos位置开始,长度为len的 子串,并将其存入到串Sub中。操作成功返回1,不成功 返回0。其算法描述如下:
• int SubString(String *S,String *Sub,int pos,int len)
数据结构 (5)
else break; /* find the proper position */
}
H->Elements[ i ] = LastElement;
return MinElement;
}
11/15
4. Other Heap Operations:
§3 Binary Heap
Note: Finding any key except the minimum one will have to take a linear scan through the entire heap.
Note: Analogously, we can declare a max heap by changing the heap order property.
[1] 9 The largest key
[1] 10 The smallest key
[2] 6 [3] 3
[2] 20 [3] 83
[4] 5
return FatalError( "Out of space!!!" ); H->Capacity = MaxElements; H->Size = 0; H->Elements[ 0 ] = MinData; /* set the sentinel */ return H; }
6/15
2. Heap Order Property:
LastElement = H->Elements[ H->Size-- ]; /* take last and reset size */
for ( i = 1; i * 2 <= H->Size; i = Child ) { /* Find smaller child */
数据结构第五章参考答案
习题51.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。
答案:129(2)3个结点可构成(___________)棵不同形态的二叉树。
答案:5(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。
答案:31(4)在结点个数为n(n>1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
答案:2 n-1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。
答案:2k-1(6)(7)有n个结点并且其高度为n的二叉树的数目是(___________)。
答案:2n-1(8)设只包含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。
答案:2k+1-1 k+1(9)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT (X)的编号为()。
答案:24(10)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。
答案:384(11)(12)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________)。
答案:68(13)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。
答案:128(14)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________)。
答案:ABCDEF(15)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。
数据结构第五章 数组与广义表
压缩存储方法:只需要存储下三角 (含对角线)上的元素。可节省一 半空间。
可以使用一维数组Sa[n(n+1)/2]作为n阶对称矩阵A的存 储结构,且约定以行序为主序存储各个元素,则在Sa[k]和矩
阵元素aij之间存在一一对应关系: (下标变换公式)
i(i+1)/2 + j 当i≥j k = j(j+1)/2 + i 当i<j
q = cpot[col];
T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; ++cpot[col]; }
分析算法FastTransposeSMatrix的时间 复杂度:
for (col=1; col<=M.nu; ++col) … … for (t=1; t<=M.tu; ++t) … … for (col=2; col<=M.nu; ++col) … … for (p=1; p<=M.tu; ++p) … …
//对当前行中每一个非零元
处
brow=M.data[p].j;
理
if (brow < N.nu ) t = N.rpos[brow+1];
M
else { t = N.tu+1 }
的
for (q=N.rpos[brow]; q< t; ++q) { ccol = N.data[q].j; // 乘积元素在Q中列号
一、三元组顺序表
对于稀疏矩阵,非零元可以用三元组表示, 整个稀疏矩阵可以表示为所有非零元的三元组所 构成的线性表。例如:
数据结构 5数组和广义表A
1 Status Locate(Array A,va_list ap,int &off) 2{ 3 //若ap指示的各下标值合法,则求出该元素在A中,相对地
址off
4 off=0; 5 for(i=0;i<A.dim;++i) 6 { 7 ind=va_arg(ap,int); 8 if(ind<0||ind>A.bounds[i]) return OVERFLOW; 9 off+=A.constants[i] *ind; 10 } 11 return OK; 12 }
行数 总列数,即 第2维长度 元素个数
ij
补充:计算二维数组元素地址的通式
设一般的二维数组是A[c1..d1, c2..d2],这里c1,c2不一定是0。
单个元素 长度
二维数组列优先存储的通式为: LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L
6
例1〖软考题〗:一个二维数组A[1..6, 0..7],每个数组元素
16
5.4
1、定义:
广义表的定义
广义表是线性表的推广,也称为列表(lists) 记为: LS = ( a1 , a2 , ……, an ) 广义表名 表头(Head) 表尾 (Tail) n是表长
在广义表中约定:
① 第一个元素是表头,而其余元素组成的表称为表尾; ② 用小写字母表示原子类型,用大写字母表示列表。
13
1 Status Value(Array A,ElemType &e,…){ 2 //A是n维数组,e为元素变量,随后是n个下标值,若各下
标不超界,则e赋值为所指定的A的元素值,即将指定元素值 读到e变量中。
数据结构第五章习题
数据结构第五章习题1.名词解释(1)串(2)广义表2.判断题〔以下各题,正确的请在前面的括号内打√,错误的打×〕〔〕〔1〕串中不可以包含空白字符。
〔〕〔2〕两个串相等必有串长度相同。
〔〕〔3〕两个串相等那么各位置上的字符不一定对应相同。
〔〕〔4〕串的长度不能为零。
〔〕〔5〕子串是主串中字符构成的有限序列。
〔〕〔6〕串是一种特殊的线性表。
〔〕〔7〕空格串是由一个或多个空格字符组成的串,其长度为1。
〔〕〔8〕广义表最大子表的深度为广义表的深度。
〔〕〔9〕广义表不能递归定义。
〔〕〔10〕广义表的组成元素可以是不同形式的元素。
3.填空题(1)串中字符的个数称为串的____________。
(2)不含有任何字符的串称为____________,它的长度是____________。
(3)串的___________就是把串所包含的字符序列,依次存入连续的存储单元中去。
(4)串的链式存储结构是将存储区域分成一系列大小相同的节点,每个节点有两个域:____________域和____________域。
其中____________域用于存储数据,____________域用于存储下一个节点的指针。
(5)子串的定位操作通常称为串的____________。
(6)串的两种最根本的存储方式是____________和____________。
(7)广义表((a), ((b), c), (((d))))的表头是____________,表尾是____________。
(8)广义表的表尾总是一个____________。
4.选择题(1)串是一种特殊的线性表,其特殊性表达在〔〕。
A.可以顺序存储B.数据元素是一个字符C.可以链接存储D.数据元素可以任意(2)串的长度是〔〕。
A.串中不同字母的个数B.串中不同字符的个数C.串中所含字符的个数且大于零D.串中所含字符的个数(3)空串与空格串〔〕。
A.相同B.不相同C.可能相同D.无法确定(4)求字符串T在字符串S中首次出现的位置的操作为〔〕。
数据结构第5章课件 中国石油大学(华东)
二叉链表
leftChild
data rightChild
22
二叉树的链表表示(三叉链表)
每个结点增加一个指向双亲的指针parent,使 得查找双亲也很方便。
leftChild data parent rightChild
三叉链表
data
leftChild
27
BinTreeNode *LeftChild (BinTreeNode *current ) { return (current != NULL )? current->leftChild :NULL; } BinTreeNode *RightChild (BinTreeNode *current ) { return ( current!= NULL) ? current->rightChild : NULL; } int Height( ){return Height(root);} int Size( ){return Size(root);} BinTreeNode *GetRoot ( ) const { return root; } void preOrder( ) {preOrder(root);} //前序遍历 void inOrder( ) {inOrder(root);} //中序遍历 void postOrder( ) {postOrder(root);} //后序遍历 void levelOrder( ) ; // 不需要递归,所以直接对外接 口调用即可。层序遍历 28
b
f
c
d
g
6
e
a
b.嵌套集合表示法: b 根据树的集合定义,写出集合划分。 { a, {b,{e},{f}}, {c}, {d,{g}} } e c d
数据结构第五章图习题
05 图【单选题】1. 设无向图G 中有五个顶点,各顶点的度分别为2、4、3、1、2,则G 中边数为(C )。
A、4条 B、5条 C、6条 D、无法确定2. 含n 个顶点的无向完全图有(D )条边;含n 个顶点的有向图最多有(C )条弧;含n 个顶点的有向强连通图最多有(C )条弧;含n 个顶点的有向强连通图最少有(F)条弧;设无向图中有n 个顶点,则要接通全部顶点至少需(G )条边。
A 、n 2B 、n(n+1)C 、n(n-1)D 、n(n-1)/2E 、n+1F 、nG 、n-13. 对下图从顶点a 出发进行深度优先遍历,则(A )是可能得到的遍历序列。
A 、acfgdebB 、abcdefgC 、acdgbefD 、abefgcd对下图从顶点a 出发进行广度优先遍历,则(D )是不可能得到的遍历序列。
A 、abcdefgB 、acdbfgeC 、abdcegfD 、adcbgef4. 设图G 的邻接矩阵A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡010101010,则G 中共有(C )个顶点;若G 为有向图,则G 中共有(D )条弧;若G 为无向图,则G 中共有(B )条边。
A 、1B 、2C 、3D 、4E 、5F 、9G 、以上答案都不对5. 含n 个顶点的图,最少有(B )个连通分量,最多有(D )个连通分量。
A 、0B 、1C 、n-1D 、n6. 用邻接表存储图所用的空间大小(A )。
A 、与图的顶点数和边数都有关B 、只与图的边数有关C 、只与图的顶点数有关D 、与边数的平方有关7. n 个顶点的无向图的邻接表最多有(B )个表结点。
A 、n 2B 、n(n-1)C 、n(n+1)D 、n(n-1)/28. 无向图G=(V ,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是(D )。
数据结构第5章
第5章:数组和广义表 1. 了解数组的定义;填空题:1、假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B ;末尾元素A 57的第一个字节地址为 1282 。
2、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。
2. 理解数组的顺序表示方法会计算数组元素顺序存储的地址;填空题:1、已知A 的起始存储位置(基地址)为1000,若按行存储时,元素A 14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A 47的第一个字节地址为 (6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A 57可知,是从0行0列开始!) 2、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。
答:不考虑0行0列,利用列优先公式: LOC(a ij )=LOC(a c 1,c 2)+[(j-c 2)*(d 1-c 1+1)+i-c 1)]*L 得:LOC(a 32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950选择题:( A )1、假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。
(无第0行第0列元素)A .16902B .16904C .14454D .答案A, B, C 均不对 答:此题(57列×60行+31行)×2字节+10000=16902( B )2、设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是:A .i(i-1)/2+j-1B .i(i-1)/2+jC .i(i+1)/2+j-1D .i(i+1)/2+j3、从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
《数据结构》第五章习题参考答案
《数据结构》第五章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、知道一颗树的先序序列和后序序列可唯一确定这颗树。
( ×)2、二叉树的左右子树可任意交换。
(×)3、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。
(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。
( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。
(×)8、度为2的树就是二叉树。
(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。
A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。
A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。
该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。
①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。
A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。
A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。
2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。
数据结构-第5章--数组练习题
数据结构-第5章--数组练习题第5章数组一、选择题3.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(A)。
A.BA+141B.BA+180C.BA+222D.BA+2254.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(A)。
A.808B.818C.1010D.10205.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是()。
1195A.1175B.1180C.1205D.12107.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。
供选择的答案:A.198B.195C.1972+64某3=19410.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(iA.i某(i-1)/2+jB.j某(j-1)/2+iC.i某(i+1)/2+jD.j某(j+1)/2+i11.设A是n某n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为(C)。
A.i(i-l)/2+jB.j(j-l)/2+iC.j(j-l)/2+i-1D.i(i-l)/2+j-112.A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(AB)。
朱战立数据结构第五版答案
朱战立数据结构第五版答案第一章:引论1.1 数据结构的概念数据结构是指数据对象中元素之间的关系和相互操作的一种集合体。
数据结构的设计和实现对于解决实际问题非常重要。
1.2 抽象数据类型(ADT)抽象数据类型是指一个数学模型以及该模型上的一组操作。
通过使用抽象数据类型,我们可以将数据对象的表示和对数据对象的操作封装在一起,从而实现了数据的抽象。
1.3 算法的基本概念算法是解题方案的准确而完整的描述,它是实现特定功能的有限指令序列。
算法的设计和分析是数据结构和算法课程的核心内容。
第二章:算法分析2.1 算法效率的度量算法的效率可以从时间复杂度和空间复杂度两个方面来度量。
时间复杂度是指算法执行所需要的时间;空间复杂度是指算法执行所需要的额外空间。
2.2 最坏情况和平均情况在算法分析中,我们通常关注算法在最坏情况下的表现,这是因为最坏情况下的性能是算法的上界,可以保证算法在任何情况下都能满足要求。
2.3 算法设计的要求算法设计的要求包括正确性、可读性、健壮性和高效性。
一个好的算法应当能够解决问题、易于理解、能够处理各种输入,并且在合理的时间内完成。
第三章:线性表3.1 线性表的定义线性表是具有相同数据类型的n个数据元素的有限序列。
线性表可以为空表,也可以包含一个或多个数据元素。
3.2 线性表的顺序表示线性表的顺序表示是指使用一组地址连续的存储单元依次存储线性表的元素。
顺序表示的优点是随机访问速度快,但插入和删除操作的效率较低。
3.3 线性表的链式表示线性表的链式表示是指使用一组任意存储单元来存储线性表的元素,通过指针将这些存储单元链接在一起。
链式表示的优点是插入和删除操作的效率较高,但访问元素的速度较慢。
3.4 线性表的应用线性表是最常用的数据结构之一,它在实际问题中有广泛的应用。
例如,线性表可以用来实现栈、队列、串等数据结构。
第四章:栈和队列4.1 栈栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作。
数据结构习题五(答案)
数据结构习题(5)学号________ 姓名_______ 课堂号(___________)1.选择题1)对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( A )A.(N+1)/2 B. N/2 C. N D. [(1+N)*N ]/22)下面关于二分查找的叙述正确的是 ( D )A. 表必须有序,表可以顺序方式存储,也可以链表方式存储B. 表必须有序且表中数据必须是整型,实型或字符型C. 表必须有序,而且只能从小到大排列D. 表必须有序,且表只能以顺序方式存储3)折半查找的时间复杂性为(D)A. O(n2)B. O(n)C. O(nlog(n))D. O(log(n))4)概率不同的有序表,最适合的查找算法是( C )A.顺序查找B.折半查找C.静态树表查找 D.索引顺序表查找5)平均查找长度最短的查找方法是____C________。
A.折半查找 B.顺序查找 C.哈希查找 4.其他6)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中A比较大小,查找结果是失败。
A.20,70,30,50 B.30,88,70,50 C.20,50 D.30,88,507)当采用分快查找时,数据的组织方式为 ( B )A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同8)分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( C )A.(100,80, 90, 60, 120,110,130) B.(100,120,110,130,80, 60, 90)C.(100,60, 80, 90, 120,110,130)D. (100,80, 60, 90, 120,130,110)9)设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散列函数为H(key)=key MOD 13,散列地址为1的链中有( D )个记录。
数据结构第五章数组和广义表
数据结构第五章数组和广义表(总6页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第五章数组和广义表:习题习题一、选择题1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。
A. 808B. 818C. 1010D. 10202.同一数组中的元素( )。
A. 长度可以不同 B.不限 C.类型相同 D. 长度不限3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。
从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。
(1)存放A至少需要( )个字节。
(2)A的第8列和第5行共占( )个字节。
(3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址一致。
供选择的答案:(1)A. 90 B. 180 C. 240 D. 270(2) A. 108 B. 114 C. 54 D. 60(3)[8][5] B. A[3][10] [5][8] [O][9]4.数组与一般线性表的区别主要是( )。
A.存储方面B.元素类型方面C.逻辑结构方面D.不能进行插入和删除运算5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。
A. (i-l)×n+jB. (i-l)×n+j-lC.i×(j-l) D. j×m+i-l6.所谓稀疏矩阵指的是( )。
A.零元素个数较多的矩阵B.零元素个数占矩阵元素中总个数一半的矩阵C.零元素个数远远多于非零元素个数且分布没有规律的矩阵D.包含有零元素的矩阵7.对稀疏矩阵进行压缩存储的目的是( )。
A.便于进行矩阵运算B.便于输入和输出C.节省存储空间D. 降低运算的时间复杂度8.稀疏矩阵一般的压缩存储方法有两种,即( )。
数据结构第五章 数组和广义表
5.3.1
特殊矩阵
1、对称矩阵 在一个n阶方阵A中,若元素满足下述性质: aij = aji 1≤i,j≤n 则称A为对称矩阵。 a11 1 5 1 3 7 a21 a 22 5 0 8 0 0 a31 a32 a33 1 8 9 2 6 ……………….. 3 0 2 5 1 an 1 a n 2 a n 3 …a n n 7 0 6 1 3
第5章
数组和广义表
5.1 数组的定义
5.2 数组的顺序表示和实现
5.3 矩阵的压缩存储
5.3.1 特殊矩阵
5.3.2 稀疏矩阵
5.4 广义表的定义
5.1 数组的定义
数组-----线性表的扩展 A =(a0,a1,a2,…,an-1)
a00 a10 ┇ Am×n= ai0 ┇ am-1,0 a01 … a0j … a11 … a1j … ┇ ai2 … aij … ┇ am-1,2 … am-1,j … a0,n-1 a1,n-1 ai,n-1 am-1,n-1 α0 α1 ┇ Am×n= α i ┇ α m-1
Assign( &A, e, index1, ..., indexn) 赋值操作 初始条件:A是n维数组,e为元素变量,随后是n个下标值。 操作结果:若下标不超界,则将e的值赋给所指定的A的元 素,并返回OK。 对于数组来说一旦维数确定了,每个元素的下标确定了, 那么整个数组就确定了,这样的一个数组结构除了能改变 某元素的值,其他的不能再改变。
5.2 数组的顺序表示和实现
数组类型特点: 1) 只有引用型操作,没有加工型操作; 2) 数组是多维的结构,而存储空间是一个一维的结构。 有两种顺序映象的方式。
有两种顺序映像方法: 1)以行序为主序(行优先,先行后列):先存储行号较小 的元素,行号相同者先存储列号较小的元素;
数据结构5
重点和难点
重点是学习数组类型的定义及其存储表示. 重点是学习数组类型的定义及其存储表示. 数组类型的定义及其存储表示
知识点
数组的类型定义,数组的存储表示,特殊矩阵的压缩存储表示方法, 数组的类型定义,数组的存储表示,特殊矩阵的压缩存储表示方法, 随机稀疏矩阵的压缩存储表示方法. 随机稀疏矩阵的压缩存储表示方法.
A m×n m×n
a 00 a 10 = ... a m-1,0
a 01 a11 ...
a 02 a12 ...
a m-1,1 a m-1,2
... a 0,n-1 ... a1,n-1 ... ... ... a m-1,n-1
行向量
Data Structure
2010-1-2
n阶矩阵; 阶矩阵; 非零元都集中在以主对角线为中心的带状区域中. 所有的非零元都集中在以主对角线为中心的带状区域中 所有的非零元都集中在以主对角线为中心的带状区域中.
Data Structure 2010-1-2 Page 14
压缩存储——对称矩阵 对称矩阵 压缩存储
仅存储下 三角
a11 a12 …. … ….. a1n a21 a22 …….. ……. a2n …………………. an1 an2 ……..
A m×n m×n
a 00 a 10 = ... a m-1,0
a 01 a11 ...
a 02 a12 ...
a m-1,1 a m-1,2
... a 0,n-1 ... a1,n-1 ... ... ... a m-1,n-1
Data Structure
2010-1-2
Page 6
Assign(&A, e, index1, ..., indexn)
计算机学科专业基础综合数据结构-5
计算机学科专业基础综合数据结构-5一、综合应用题(总题数:10,分数:100.00)一棵高度为h的满m叉树有如下性质:第h层上的结点都是叶结点,其余各层上每个结点都有m棵非空子树。
如果按层次自顶向下,同一层自左向右,顺序从1开始对全部结点进行编号,试问:(1).各层的结点个数是多少?(分数:4.00)__________________________________________________________________________________________可以参照二叉树的性质,将其扩展到m叉树。
因为第1层有1个结点,第2层有m个结点,第3层有m 2个结点……一般地,第i层有m i-1个结点(1≤i≤h)。
(2).编号为i的结点的父结点(若存在)的编号是多少?(分数:4.00)__________________________________________________________________________________________在m叉树的情形,结点i的第1个子女编号为j=(i-1)×m+2。
反过来,结点i的双亲的编号是,根结点没有双亲,所以以上计算式要求i>1。
如果考虑对于i=1也适用(根的双亲设为0),可将上式改为。
(3).编号为i的结点的第k个子女结点(若存在)的编号是多少?(分数:4.00)__________________________________________________________________________________________因为结点i的第1个子女编号为(i-1)×m+2,若设该结点子女的序号为k=1,2,…,m,则第k个子女结点的编号为(i-1)×m+k+1(1≤k≤m)。
(4).编号为i的结点有右兄弟的条件是什么?其右兄弟结点的编号是多少?(分数:4.00)__________________________________________________________________________________________当结点i不是其双亲的第m个子女时才有右兄弟。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳信息学院
三、二维数组的存储 1. 行为主序的方式:先存储数组的第一行元素,再存储第二行元素 ; 行为主序的方式:先存储数组的第一行元素,再存储第二行元素…; 2. 列为主序的方式:先存储数组的第一列元素,再存储第二列元素 ; 列为主序的方式:先存储数组的第一列元素,再存储第二列元素…; 在众多的程序设计语言中,以行序为主序方式的有PASCAL、 在众多的程序设计语言中,以行序为主序方式的有 、 COBOL、C及扩展 及扩展BASIC等,以列序为主序方式的有 语言。 、 及扩展 等 以列序为主序方式的有FORTRAN语言。 语言
7
M=
0
0 0
0 0
15 0 0 0
0 -4
0 0 0 -1 0 0 -2 0 0 0 0 21 深圳信息学院
第 5-8 页
二、稀疏矩阵的三元组表示法: 稀疏矩阵的三元组表示法: (1)将稀疏矩阵的非零元素用三元组 ) < row, column, value > 表示( 表示稀疏矩阵的第 row 行、第 表示( column 列的值为 value) ) (2)用一顺序表(二维数组)来存放上述三元组(每一个三元组即为 )用一顺序表(二维数组)来存放上述三元组( 顺序表的一个数据元素)并按行为主序存放。 顺序表的一个数据元素)并按行为主序存放。 4 6 6 例: 0 0 7 顺序存储结构——三元组表示法 顺序存储结构 三元组表示法 0 4 15
例:一维数组
a
a0
0
a1
1
a2
2
a3
3
……
……
ai
i
...…
……
an-1
n-1
深圳信息学院
第 5-2 页
矩阵) 例:二维数组(m X n矩阵 二维数组 矩阵
a[0][0] a[0][1] a[1][1] a[1][0] A = a[2][0] a[2][1] a[m −1][0] a[m −1][1]
7
M=
0
0 0
0 0
15 0 0 0
1 2 3 3
1 3 0 5
-4 -1 -2 21
第 5-9 页
0 -4
0 0 0 -1 0 0 -2 0 0 0 0 21
深圳信息学院
loc(aij)=loc(a00)+(i*n+j)*s
深圳信息学院
第 5-6 页
a00 a10
按列为主序存放
……. a(m-1)0 a01
a00 a01 …….. a10 a11 ……..
a0(n-1) a1()
a11 …….. a(m-1)1 ……. a0(n-1) a1(n-1) …….. a(m-1)(n-1)
深圳信息学院
第 5-5 页
a00 a01 ……. a0(n-1) a10
按行为主序存放
a00 a01 …….. a10 a11 ……..
a0(n-1) a1(n-1)
a11 …….. a1(n-1)
…………………. a(m-1)0 …….. a(m-1)(n-1)
………. a(m-1)0 a(m-1)1 …….. a(m-1)(n-1)
…………………. a(m-1)0 …….. a(m-1)(n-1)
loc(aij)=loc(a00)+(j*m+i)*s
深圳信息学院
第 5-7 页
5.3
稀疏矩阵
一、概念 矩阵是许多科学与工程计算问题中常常涉及到的一种运算对象。 矩阵是许多科学与工程计算问题中常常涉及到的一种运算对象。 一个m行 列的矩阵是一平面阵列 列的矩阵是一平面阵列, 个元素。 一个 行n列的矩阵是一平面阵列,有m×n个元素。可以对矩阵作加、 × 个元素 可以对矩阵作加、 乘等运算。这里我们感兴趣的不是矩阵本身, 减、乘等运算。这里我们感兴趣的不是矩阵本身,而是矩阵在计算机 内的有效存储方法和对应的各种矩阵运算的算法。 内的有效存储方法和对应的各种矩阵运算的算法。只有少数程序设计 语言提供了矩阵运算。通常程序员是用二维数组存储矩阵。 语言提供了矩阵运算。通常程序员是用二维数组存储矩阵。 有较多值相同元素或较多零元素, 有较多值相同元素或较多零元素,且值相同元素或者零元素分布没 有一定规律的矩阵称为稀疏矩阵。 有一定规律的矩阵称为稀疏矩阵。 例:
《数据结构》 数据结构》
第五章
数组和广义表
深圳信息学院
第 5-1 页
数
组
5.1 数组定义 数组是由下标和值组成的偶对(下标, 的有限集合。 数组是由下标和值组成的偶对(下标,值)的有限集合。 数组中每组有定义的下标,都存在一个与之相对应的值, 数组中每组有定义的下标,都存在一个与之相对应的值,这个值称 为数组元素。 为数组元素。
a[0][ n −1] a[1][ n −1] a[2][ n −1] a[m −1][ n −1]
深圳信息学院
第 5-3 页
5.2 数组的顺序存储结构 一、数组的操作 1. 建立数组。 建立数组。 2. 对于给定下标,存取相应的数组元素。 对于给定下标,存取相应的数组元素。 3. 对于给定下标,修改相应的数组元素。 对于给定下标,修改相应的数组元素。 二、一维数组的存储 Loc(a[i])=Loc(a[0])+i*s 0 1 i n-1 a0 a1 … ai … an-1 Loc(a0) Loc(a0)+s Loc(a0)+i*s Loc(a0)+(n-1)*s a0 a1 … ai … an-1