数据结构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 )。
- 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