数据结构与算法 习题3(树、图)

合集下载

罗文劼《数据结构与算法》第4版-第1章课后习题参考答案

罗文劼《数据结构与算法》第4版-第1章课后习题参考答案

第1章绪论1.选择题(1)C (2)B (3)C (4)D (5)B2.判断题(1)√(2)Ⅹ(3)Ⅹ(4)Ⅹ(5)√3.简答题(1)根据数据元素之间的不同逻辑关系,通常将其划分为哪几类结构?【解答】常见的四种逻辑结构有:①集合结构:数据元素间的关系是“属于同一个集合”。

②线性结构:数据元素之间存在着一对一的关系。

③树型结构:数据元素之间存在着一对多的关系。

④图型结构:数据元素之间存在着多对多的关系。

(2)请描述线性结构中数据元素与数据元素之间的关系特点?【解答】线性结构的特点是数据元素之间是一种线性关系,数据元素“一个接一个的排列”。

在线性结构中,有且仅有一个元素被称为“第一个”,除第一个元素之外其他元素均有唯一一个“前驱”;有且仅有一个元素被称为“最后一个”,除最后一个元素之外其他元素均有唯一一个“后继”。

(3)请描述树形结构中数据元素与数据元素之间的关系特点?【解答】树形存储结构,就是数据元素与元素之间存在着一对多关系的数据结构。

在树形存储结构中,树的根节点没有前驱结点,其余的每个节点有且只有一个前驱结点,除叶子结点没有后续节点外,其他节点的后续节点可以有一个或者多个。

(4)常用的存储结构有哪几种,各自的特点是什么?【解答】常见的四种存储结构有:①顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。

顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。

②链接存储:对逻辑上相邻的元素不要求不要求物理位置相邻的存储单元,元素间的逻辑关系通过附设的指针域来表示。

③索引存储:通过建立索引表存储结点信息的方法,其中索引表一般存储结点关键字和一个地点信息,可通过该地址找到结点其它信息。

④散列存储:根据结点的关键字直接计算出该结点的存储地址的方法。

(5)简述算法和程序的区别。

【解答】一个算法若用程序设计语言来描述,则它就是一个程序。

算法的含义与程序十分相似,但又有区别。

一个程序不一定满足有穷性。

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案

2.3 课后习题解答2.3.2 判断题1.线性表的逻辑顺序与存储顺序总是一致的。

〔×〕2.顺序存储的线性表可以按序号随机存取。

〔√〕3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

〔×〕4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有一样的特性,因此属于同一数据对象。

〔√〕5.在线性表的顺序存储构造中,逻辑上相邻的两个元素在物理位置上并不一定相邻。

〔×〕6.在线性表的链式存储构造中,逻辑上相邻的元素在物理位置上不一定相邻。

〔√〕7.线性表的链式存储构造优于顺序存储构造。

〔×〕8.在线性表的顺序存储构造中,插入和删除时移动元素的个数与该元素的位置有关。

〔√〕9.线性表的链式存储构造是用一组任意的存储单元来存储线性表中数据元素的。

〔√〕10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储构造。

〔×〕11.静态链表既有顺序存储的优点,又有动态链表的优点。

所以它存取表中第i 个元素的时间与i 无关。

〔×〕12.线性表的特点是每个元素都有一个前驱和一个后继。

〔×〕2.3.3 算法设计题1.设线性表存放在向量A[arrsize] 的前 elenum 个分量中,且递增有序。

试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。

【提示】直接用题目中所给定的数据构造〔顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个构造体〕,因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,假设有,那么根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,〔也可以从高低标端开始一边比拟,一边移位〕然后插入x ,最后修改表示表长的变量。

int insert (datatype A[],int *elenum,datatype x)/* 设 elenum 为表的最大下标*/ {if (*elenum==arrsize-1)return 0;/* 表已满,无法插入*/else {i=*elenum;while (i>=0 && A[i]>x)/* 边找位置边移动*/{A[i+1]=A[i];i--;}/* 插入成功 */A[i+1]=x;(*elenum)++;return 1;}}时间复杂度为O(n) 。

数据结构与算法设计-习题1-3

数据结构与算法设计-习题1-3

int
data;
struct Lnode *next;
// 数据域 // 指针域
} LNode, *LinkList; LinkList la, lb; // 单链表的头指针 请用 la 和 lb 中的结点合并生成一个新的非 递增的有序单链表 lc。合并完成后,原来的 la 和 lb 成为空链表。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
正确且高效的算法如下: Status DeleteK(SqList &a ,int i, int k) {//设线性表元素从a.base[1]起存储,从第i个元素起
删除k个元素。
if ( i<1|| k< 0 || (i+k)>a.length) return ERROR;
for ( j=i+k;j<=a.length; ++j)
操作步骤
1) 建空表 Lc; 2) 依次从 La 或 Lb 中“摘取”元素值较小的
结点插入到 Lc 表中第一个结点之前直至其 中一个表变空为止; 3) 继续将 La 或 Lb 其中一个表的剩余结点插 入在 Lc 表的表头结点之后; 4) 释放 La 表和 Lb 表的表头结点。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
单链表中逻辑上相邻的元素的物理位置 不一定 紧邻。
(3)在单链表中,除了头结点外,任一结点的存储位置 由 该结点的直接前趋 指示。
(4)在单链表中设置头结点的作用是
在表的第一个元素结点之前插入新元素结点或删除 第一个元素结点不需修改头作指者 针(时间 2000年)

数据结构与算法模拟习题(附参考答案)

数据结构与算法模拟习题(附参考答案)

数据结构与算法模拟习题(附参考答案)一、单选题(共86题,每题1分,共86分)1.具有5个顶点的有向完全图有多少条弧?A、16B、20C、25D、10正确答案:B2.下列程序的时间复杂度为()。

i = 0; s = 0;while(s < n){i++;s = s + i;}A、Θ(n)B、Θ(1)C、Θ(n2)D、Θ(n½)正确答案:D3.栈和队列的共同点是()。

A、没有共同点B、只允许在端点处插入和删除元素C、都是先进后出D、都是先进先出正确答案:B4.下面描述中正确的为( )。

A、线性表的逻辑顺序与物理顺序总是一致的B、线性表的顺序存储表示优于链式存储表示。

C、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。

D、二维数组是其数组元素为线性表的线性表。

正确答案:C5.对N个不同的数据采用冒泡算法进行从大到小的排序,下面哪种情况下肯定交换元素次数最多?A、从大到小排好的B、元素无序C、元素基本有序D、从小到大排好的正确答案:D6.表达式3*2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。

A、3, 2, 8;( * ^ -B、3, 2, 4, 2, 2;( * ^ ( -C、3, 2, 4, 1, 1;( ^ ( + -D、3, 2, 8;( * ^ ( -正确答案:D7.二叉树的高度若根节点为高度1,一棵具有 1025 个结点的二叉树的高度为▁▁▁▁▁ 。

A、10~1024 之间B、11~1025 之间C、10D、11正确答案:B8.数据采用链式存储结构时,要求( )A、每个节点占用一片连续的存储区域B、所有节点占用一片连续的存储区域C、节点的最后一个数据域一定是指针类型D、每个节点有多少个后继就设多少个指针域正确答案:A9.在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:A、将N个结点从小到大排序B、删除第i个结点(1≤i≤N)C、访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)D、在第i个结点后插入一个新结点(1≤i≤N)正确答案:C10.将元素序列{18, 23, 4, 26, 31, 33, 17, 39}按顺序插入一个初始为空的、大小为13的散列表中。

数据结构习题

数据结构习题

树、图习题一、选择题1 已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( )A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE2 一个具有1025个结点的二叉树的高h为()A.11 B.10 C.11至1025之间 D.10至1024之间3 二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历: HFIEJKG 。

该二叉树根的右子树的根是:()A、 EB、 FC、 GD、 H4 引入二叉线索树的目的是()A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一5 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。

与森林F对应的二叉树根结点的右子树上的结点个数是()。

A.M1 B.M1+M2 C.M3 D.M2+M36 有n个叶子的哈夫曼树的结点总数为()。

A.不确定 B.2n C.2n+1 D.2n-17 一个有n个结点的图,最少有()个连通分量,最多有()个连通分量。

A.0 B.1 C.n-1 D.n8 无向图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)},对该图进行深度优先遍历,得到的顶点序列正确的是()。

A.a,b,e,c,d,f B.a,c,f,e,b,d C.a,e,b,c,f,d D.a,e,d,f,c,b9 已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>,<V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。

《数据结构与算法》第六章-树与二叉树习题

《数据结构与算法》第六章-树与二叉树习题

《数据结构与算法》第二部分习题精选一、下面是有关二叉树的叙述,请判断正误()1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。

()2.二叉树中每个结点的两棵子树的高度差等于1。

()3.二叉树中每个结点的两棵子树是有序的。

()4.二叉树中每个结点有两棵非空子树或有两棵空子树。

()5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树(若存在的话)所有结点的关键字值。

()6.二叉树中所有结点个数是2k-1-1,其中k是树的深度。

()7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。

()8.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i—1个结点。

()9.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。

(√)10. 具有12个结点的完全二叉树有5个度为2的结点。

二、填空1.由3个结点所构成的二叉树有种形态。

2. 一棵深度为6的满二叉树有个分支结点和个叶子。

3.一棵具有257个结点的完全二叉树,它的深度为。

4.设一棵完全二叉树有700个结点,则共有个叶子结点。

5. 设一棵完全二叉树具有1000个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。

6.一棵含有n个结点的k叉树,可能达到的最大深度为,最小深度为。

7. 二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。

因而二叉树的遍历次序有六种。

最常用的是三种:前序法(即按N L R次序),后序法(即按次序)和中序法(也称对称序法,即按L N R次序)。

这三种方法相互之间有关联。

若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是。

8.中序遍历的递归算法平均空间复杂度为。

9.用5个权值{3, 2, 4, 5, 1}构造的哈夫曼(Huffman)树的带权路径长度是。

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解1. 习题一:数组求和题目描述:给定一个整数数组,编写一个函数来计算它的所有元素之和。

解题思路:遍历数组,将每个元素累加到一个变量中,最后返回累加和。

代码实现:```pythondef sum_array(arr):result = 0for num in arr:result += numreturn result```2. 习题二:链表反转题目描述:给定一个单链表,反转它的节点顺序。

解题思路:采用三指针法,依次将当前节点的下一个节点指向上一个节点,然后更新三个指针的位置,直到链表反转完毕。

代码实现:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef reverse_list(head):prev = Nonecurr = headwhile curr:next_node = curr.nextcurr.next = prevprev = currcurr = next_nodereturn prev```3. 习题三:二叉树的层序遍历题目描述:给定一个二叉树,返回其节点值的层序遍历结果。

解题思路:采用队列来实现层序遍历,先将根节点入队,然后循环出队并访问出队节点的值,同时将出队节点的左右子节点入队。

代码实现:```pythonclass TreeNode:def __init__(self, val=0, left=None, right=None): self.val = valself.left = leftself.right = rightdef level_order(root):if not root:return []result = []queue = [root]while queue:level = []for _ in range(len(queue)):node = queue.pop(0)level.append(node.val)if node.left:queue.append(node.left)queue.append(node.right)result.append(level)return result```4. 习题四:堆排序题目描述:给定一个无序数组,使用堆排序算法对其进行排序。

数据结构-树习题

数据结构-树习题

数据结构-树习题第六章树⼀、选择题1、⼆叉树的深度为k,则⼆叉树最多有( C )个结点。

A. 2kB. 2k-1C. 2k-1D. 2k-12、⽤顺序存储的⽅法,将完全⼆叉树中所有结点按层逐个从左到右的顺序存放在⼀维数组R[1..N]中,若结点R[i]有右孩⼦,则其右孩⼦是(B )。

A. R[2i-1]B. R[2i+1]C. R[2i]D. R[2/i]3、设a,b为⼀棵⼆叉树上的两个结点,在中序遍历时,a在b前⾯的条件是( B )。

A. a在b的右⽅B. a在b的左⽅C. a是b的祖先D. a是b的⼦孙4、设⼀棵⼆叉树的中序遍历序列:badce,后序遍历序列:bdeca,则⼆叉树先序遍历序列为()。

A. adbceB. decabC. debacD. abcde5、在⼀棵具有5层的满⼆叉树中结点总数为(A)。

A. 31B. 32C. 33D. 166、由⼆叉树的前序和后序遍历序列( B )惟⼀确定这棵⼆叉树。

A. 能B. 不能7、某⼆叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左⼦树中结点数⽬为( C )。

A. 3B. 2C. 4D. 58、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为( C )。

A. 67B. 68C. 69D. 709、将⼀棵有100个结点的完全⼆叉树从根这⼀层开始,每⼀层上从左到右依次对结点进⾏编号,根结点的编号为1,则编号为49的结点的左孩⼦编号为( A )。

A. 98B. 99C. 50D. 4810、表达式a*(b+c)-d的后缀表达式是( B )。

A. abcd+-B. abc+*d-C. abc*+d-D. -+*abcd11、对某⼆叉树进⾏先序遍历的结果为ABDEFC,中序遍历的结果为DBFEAC,则后序遍历的结果是( B )。

A. DBFEACB. DFEBCAC. BDFECAD. BDEFAC12、树最适合⽤来表⽰( C )。

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

数据结构

习题4 习题4b:画出与题目中的树相对应的二叉树 1 1 2 4 7 10 11 5 8 3 6 9 4 2 7 10 11 5 8 12 3 6 9
12 先序:1 2 4 7 10 11 5 3 6 8 9 12 先序:
中序: 中序:4 10 7 11 2 5 1 3 8 6 12 9 后序:10 11 7 4 5 2 8 12 9 6 3 1 后序:
数据结构

习题5 写出二叉树的三种序列, 习题 5a : 写出二叉树的三种序列 , 并将其恢复 为森林 A A B B E G H K I L C D F J K L G H I J F E C D
数据结构

习题5 习题5b:画出与题目中的树相对应的二叉树 1 1 2 11 2 11 3 3 6 9 4 7 5 8 10 12 13 14 9 10 8 6 7 4 5 12 13 14
19 12
B 5 7 3 D 21 C
E 16 8
F
21
第7章 图习题
5
15
10
2
2 4 20
4
10 4
数 据 结 构
30
1
15
6
10
3
最短路径 (1, 3) (1, 3, 2) (1, 3, 6) (1, 3, 2, 5) (1, 3, 6, 4)
dist
长度 15 19 25 29 29
S 1 1,3
数据结构习题
数据结构

补充习题1、试分别画出具有3个结点的树和二叉树的 补充习题 、试分别画出具有 个结点的树和二叉树的 所有不同形态。 所有不同形态。
树: 2种
注意: 注意: 树的孩子没有左右之分 二叉树的孩子有左右孩子之分
二叉树:
5种
2
数据结构

习题3.已知一棵度为 的树中有 个度为1的结点 的结点, 习题 已知一棵度为k的树中有 1个度为 的结点,n2个度 已知一棵度为 的树中有n 个度为m的结点 的结点, 的结点, 为2的结点,…nm个度为 的结点,则该树中有多少个 的结点 终端结点。 终端结点。 解:设n为总结点数,则有 (总结点数 n=n0+n1+n2+…nm 总结点数) 总结点数 (总边数 n-1=1*n1+2*n2+…m*nm 总边数) 总边数 两式相减得:1=n0-n2-2n3-…-(m-1)nm n0=1+n2+2n3+…+(m-1)nm m =1+∑(i-1)ni
7

13. 对下图写出3个拓扑排序和2个逆拓扑序列
数 据 结 构
拓扑排序: 7 8 2 4 6 9 3 5 1 1 1 7 8 4 9 6 2 3 5 7 1 7 8 4 6 9 3 2 5 2 逆拓扑排序: 5 3 6 4 9
23
8
5 2 3 6 9 4 8 7 1 5 3 2 6 9 4 8 7 1
0 2 010
111 2 3
WPL=7*2+8*2+2*3+3*3+4*3+5*3=72
第7章 图习题
1.已知有向图,给出该图的:每个顶点的入度、出 度;邻接矩阵;邻接表;逆邻接表。 ①每个顶点的入度、出度;
数 据
1 入度 出度 3 0
2 2 2
3 1 2
4 1 2 5 0 0 0 0 0 1 6 0 0 1 1 0 0
例如:
4 4 2 5
已知权值 W={ 4, 2, 3, 5, 7, 8} 29 12 3 9 3 9 4 5 7 5 2 12 5 3 2 3 4 5 7 5 8 17 9 3 7 5 8 2 7 5 8
构造哈夫曼树如下: 构造哈夫曼树如下:
7
8 2
5
8 4
29 0 0 7 7 00 12 12 1 5 5 0 8 8 1 10 3 011 0 4 4 110 1 17 17 1 9 9 1 55
1 2 3 4 6 578
深度优先生成树:
数 据
1 2 6 3 4
16
5 8 7
第7章 图习题
2&7. (2)广度优先遍历顶点序列:
数 据
1 2 6 5 8 347 或者 1 2 5 6 8 3 7 4
广度优先生成树:
1 2 6 3 4 7 5 8 3 2
1 5 6 7 4
17
8
第7章 图习题
3. (1)深度优先遍历顶点序列:
F
20
第7章 图习题
a. kruskal算法
3 5 7 8 12 14 16 (D,C) (B,C) (B,D) (D,E) (B,E) (A,E) (G,E) × × √ √ √ √ √
数 据
18 19 21 27 (A,G) (A,B) (F,D) (F,G) × × √
A 18 G 27 14
i=1 3
数据结构

习题8 先序序列为ABC ABC的二叉树有几种形态 习题8:先序序列为ABC的二叉树有几种形态
A A A
B A C B
B
C A
B
C B
C
C
数据结构

习题9 先序序列: 习题9:先序序列:A B C D E F G H I 中序序列: 中序序列:B C A E D G H F I 画出来并写出后序序列。 画出来并写出后序序列。
数据结构

习题4 写出二叉树的三种序列, 习题 4a : 写出二叉树的三种序列 , 并将其恢复 为森林 C A A B E G H C B D I D E F H I G F C
先序: 先序:A B D F H C E G I J J 中序: 中序:F H D B A E I G J C 后序: 后序:H F D B I J G E C A
V2 20(1,2)
V3
V4
V5
V6 ∞ 25(1,3,6) 25(1,3,6) √ //////// ////////
15(1,3) ∞ ∞ √ 1,3,2 19(1,3,2) //////// 2 ∞ ∞ √ 1,3,2,6 //////// //////// 29(1,3,2,5) ∞ 3 //////// 29(1,3,6,4) 29(1,3,2,5) 4 1,3,2,6,5 //////// √ //////// 1,3,2,6,5,4 //////// //////// 29(1,3,6,4) 5 √
1 ∧ 2 3 4 5 6
1 2 3 1 ∧ 1
4 ∧ 6 ∧ 6 ∧ 5 ∧
14
2
第7章 图习题 ④逆邻接表(入度表) 2
1 6 3
5
4
数 据
1 2 3 4 5 6
1 2 3 4 5 6
2 3 4 ∧ 2 ∧ 6 ∧ 3
5 6 ∧
6 ∧
4 ∧
15
第7章 图习题
2&7. (1)深度优先遍历顶点序列:
5 1 1Байду номын сангаас
6 2 3 1 非 对 称 矩 阵 2 3 13 6 4 5
1 2 3 4 ②邻接矩阵; 1 0 0 0 0 2 1 0 0 1 3 0 1 0 0 4 0 0 1 0 5 1 0 0 0 6 1 1 0 0
第7章 图习题 (出度表) ③邻接表 2
1 6 3
5
4
数 据
1 2 3 4 5 6
A B C E G H D F
后序序列: 后序序列: C B E H G I F D A
I
数据结构

习题16:编写算法,实现交换二叉树的左右子树。 习题16:编写算法,实现交换二叉树的左右子树。 16
void exchange(Bitree *bt) { BitNode *p; if((*bt)!=NULL) { p=(*bt)->lchild; (*bt)->lchild=(*bt)->rchild; (*bt)->rchild=p; /*交换当前根节点的左右子树 交换当前根节点的左右子树*/ 交换当前根节点的左右子树 exchange(&(*bt)->lchild); exchange(&(*bt)->rchild); } }
1 2 3 4 5
数 据
1 5 2
4
3
18
第7章 图习题
4. (2)广度优先遍历顶点序列:
1 2 3 4 5
数 据
1 5 2
4
3
19
第7章 图习题
用prim算法和kruskal算法生成最小生成树 a.prim算法(从顶点A出发)
数 据
A 18 G 27 14
19 12 E 16 8
B 5 7 3 D 21 C
相关文档
最新文档