2014113750-数学三班-冯凯歌-数据结构第六章
- 格式:docx
- 大小:5.50 MB
- 文档页数:8
习题1 参考答案1至8题答案略。
9.(1)【解】该逻辑结构为线性结构,其图形表示如下:(2)【解】该逻辑结构为树型结构,其图形表示如下:(3)【解】该逻辑结构为图型结构,其图形表示如下:(4)【解】该逻辑结构为线性结构,其图形表示如下:10.【解】该图书库存管理系统所要处理的数据对象为图书,所以该问题中涉及的数据元素为图书,设数据元素类型为bookType 类型。
每个数据元素应包含的数据项有图书编号、书名、作者、出版社、出版日期等。
可用一个表格(如下表)的形式表示图书间的逻辑关系,即该问题数学模型可采用简单的线性结构来表示。
根据问题需求功能目标,此模型的所需的主要处理操作有插入、删除、查找和修改等基本操作。
所以,现用抽象数据类型bookList 表示问题模型,其逻辑结构与基本操作的定义如下: (1)逻辑结构bookList=( D, {r} )D={b i | b i 为bookType 类型的元素,i=1,2,3, ....., n ,n ≥0} r ={ <bk i ,b i+1>| i=1,2,…, n -1, n ≥0 } (2)基本操作 ①初始化操作函数:InitBookList(&BL)。
……初始条件:图书表BL 不存在。
操作结果:构造一个空的图书表BL 。
②求图书表长度操作函数:bookListLength(BL)。
初始条件:图书表BL 已存在。
操作结果:返回图书表BL 中所包含的数据元素(图书)的个数。
③取图书表中元素操作函数:getBook(BL, i, &b)。
初始条件:图书表BL 已存在,且1≤i ≤bookListLength(BL)。
操作结果:用b 返回图书表BL 中的第i 个数据元素的值。
④按编号查找操作函数:locateById(BL, id)。
初始条件:图书表BL 已存在,id 是给定的一个图书编号。
操作结果:返回图书表BL 中图书编号为id 的数据元素的位序,若这样的数据元素不存在,则返回0。
数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。
2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。
3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。
技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。
2. 培养良好的编程习惯,提高代码编写和调试能力。
3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。
情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。
2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。
3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。
本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。
课程目标具体、可衡量,便于教师进行教学设计和评估。
通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。
二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。
- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。
- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。
2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。
- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。
- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。
3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。
- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。
- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。
数据结构C语言版第版习题答案—严蔚敏GE GROUP system office room 【GEIHUA16H-GEIHUA GEIHUA8Q8-数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论............................................. 第2章线性表 ........................................... 第3章栈和队列 ......................................... 第4章串、数组和广义表.................................. 第5章树和二叉树 ....................................... 第6章图................................................ 第7章查找 ............................................. 第8章排序.............................................第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
Ch6树一、选择题:1.下列关于哈夫曼树的叙述,错误的是<C>。
A.哈夫曼树根结点的权值等于所有叶结点权值之和。
B.具有n个叶结点的哈夫曼树共有2n-1个结点。
C.哈夫曼树是一棵二叉树,因此它的结点的度可以为0,1,2。
D.哈夫曼树是带权路径长度最短的二叉树。
2.由3个结点可以构成多少棵不同形态的二叉树<C>。
A.3 B.4 C.5 D.63.如果一棵二叉树结点的前序序列是A,B,C,后序序列是C,B,A,则该二叉树结点的中序序列是<D>。
A.A,B,C B.A,C,B C.B,C,A D.不能确定4.如图所示的4棵二叉树中,<B>不是完全二叉树。
A.B.C.D.5.二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法<B>A.正确B.错误若结点有左子树,则令其lchild指针指示其左孩子;若结点没有左子树,则令其lchild指针指示其前驱;若结点有右子树,则令其rchild指针指示其右孩子;若结点没有右子树,则令其rchild指针指示其后继。
6.二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法<A>。
A.正确B.错误7.对一棵70个结点的完全二叉树,它有<A>个叶子结点。
A.35 B.40 C.30 D.448.设一棵二叉树中,度为1的结点数为9,则该二叉树的叶子结点的数目为<D>。
A.10 B.11 C.12 D.不确定n0=n2+19.假定根结点的层次为0,含有15个结点的二叉树最小高度为<A>。
A.3 B.4 C.5 D.6假定根结点的层次为1,含有15个结点的二叉树最小高度为410.若一棵二叉树中,度为2的结点数为9,该二叉树的叶子结点的数目为<A>。
A.10 B.11 C.12 D.不确定n0=n2+111.设根结点的层次为0,则高度为k的二叉树的最大结点数为<C>。
数据结构与算法(下)解忧书店JieYouBookshop第二章课后作业1、(1分)已知一组元素的排序码为(46,74,16,53,14,26,40,38,86,65,27,34),利用直接选择排序方法写出第三次选择和交换后的排列结果。
注意:数字中间用一个空格隔开,不要写逗号和括号。
答案一共有12个数字。
答案:14 16 26 53 46 74 40 38 86 65 27 342、(1分)对于序列{E,A,S,Y,Q,U,E,S,T,I,O,N},以{6,3,1}为增量采用Shell排序。
头两趟{6,3}增量排序后,关键字的累积比较次数为()。
A、16B、17C、18D、15答案:B3、(1分)一组记录的关键字为45,80,55,40,42,85,则利用堆排序的方法建立的初始最大堆为________。
(数字之间用一个空格隔开,答案中不含逗号和括号)答案:85 80 55 40 42 45 4、(1分)在图书馆里计算机类书籍区一共有12列书架,书架上的书本来都是按照编目号排列好的,其中有些书被读者放错了地方,但通常不会超过一个书架。
来将这些书重新放回正确位置,应该使用何种排序方法() A、插入排序C、快速排序D、直接选择排序E、堆排序答案:A5、(1分)15个记录的冒泡排序算法所需最大交换次数为______,最小交换次数为______。
注意:答案中,两个数字之间用一个空格隔开,其余不含任何符号。
答案:105 0第三章课后作业1、(1分)已知一组元素的排序码为(46,74,16,53,14,26,40,38,86,65,27,34),利用直接选择排序方法写出第三次选择和交换后的排列结果。
注意:数字中间用一个空格隔开,不要写逗号和括号。
答案一共有12个数字。
答案:14 16 26 53 46 74 40 38 86 65 27 342、(1分)对于序列{E,A,S,Y,Q,U,E,S,T,I,O,N},以{6,3,1}为增量采用Shell排序。
《数据结构》吕云翔编著第6章图习题解答第六章图习题解答一、选择题1.某无向图的邻接矩阵A=,可以看出该图共有()个顶点A.3B.6C.9D.以上答案均不正确【解答】A2.无向图的邻接矩阵是一个(),有向图的邻接矩阵是一个()A 上三角矩阵B 下三角矩阵C 对称矩阵D 无规律【解答】C,D3.下列命题正确的是()。
A 一个图的邻接矩阵表示是唯一的,邻接表表示也唯一B 一个图的邻接矩阵表示是唯一的,邻接表表示不唯一C 一个图的邻接矩阵表示不唯一的,邻接表表示是唯一D 一个图的邻接矩阵表示不唯一的,邻接表表示也不唯一【解答】B4. 在一个具有n 个顶点的有向完全图中包含有()条边:A n(n-1)/2B n(n-1)C n(n+1)/2D n2【解答】B5.一个具有n个顶点k条边的无向图是一个森林(n>k),则该森林中必有()棵树。
A kB nC n - kD 1【解答】C6.用深度优先遍历方法遍历一个有向无环图,并在深度优先遍历算法中按退栈次序打印出相应的顶点,则输出的顶点序列是()。
A 逆拓扑有序B 拓扑有序C 无序D 深度优先遍历序列【解答】A7. 关键路径是AOE网中()。
A 从源点到终点的最长路径B从源点到终点的最长路径C 最长的回路D 最短的回路【解答】A二、填空题1.设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。
【解答】0,n(n-1)/2,0,n(n-1)2.任何连通图的连通分量只有一个,即是()。
【解答】其自身3.图的存储结构主要有两种,分别是()和()。
【解答】邻接矩阵,邻接表4.已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。
【解答】O(n+e)5.已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。
【解答】求第j列的所有元素之和6.有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。
1、图6-50所示是一个无向网图,请分别按Prim 算法和Kruskal 算法求最小生成树。
解:Prim 算法构造最小生成树的过程:
(1)
(2) (3)
( 5
)
用Kruskal 算法构造最小生成树的过程
2
2、如图6-51所示的有向网图,利用Dijkstra 算法求从顶点v1到其他各顶点的最短路径。
解:从V1到其他顶点的最短路径如下:
起点 终点 最短路径 最短路径长度 V1 V3 V1->V3 15
图 6-51 一个有向网图
(
2)
(3)
(
4)
(5)
V1 V5 V1->V5 15
V1 V2 V1->V2 4
V1 V6 V1->V2->V6 19
V1 V4 V1->V2->V4 24
3、对于如图6-52所示的有向网图,求出各活动的最早开始时间和最晚开始时间,并写出关键活动和关键路径。
图6-52 一个有向网图
解:
活动最早开始时间最晚开始时间
a1 0 0
a2 0 3
a3 4 4
a4 6 6
a5 4 4
关键路径有两条,分别为V1->V2->V3->V4,关键活动a1,a3,a4;
V1->v2->V4,关键活动a1,a5
4、算法设计
(1)设计算法,计算图中出度为0的顶点个数;
解:在有向图的邻接矩阵中,一行对应一个顶点,每行的非零元素的个数等于对应顶点的出度。
因此,当某行非零元素的个数为零时,则对应顶点的出度为零。
据此,从第一行开始,查找每行的非零元素个数
是否为零,若是则计数器加1。
具体算法如下:
int SumZero(AdjMatrix A)
{
count=0;
for(i=0;i<A.vertexNum;i++)
{
tag=0;
for(j=0;j<vertexNum;j++)
{
if(arc s[i][j]!=0)
{
tag=1;
break;
} } if(tag==0) count++ }
return count; }
(2)以邻接表作存储结构,设计按深度优先遍历图的非递归算法
解:设计一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述:
1. 栈初始化
2. 输出起始顶点;起始顶点改为“已访问”标志;将起始顶点进栈;
3. 重复下列操作直到栈空:
3.1取栈顶元素顶点;
3.2栈顶元素顶点存在未被访问过的邻接点w ,则 3.2.1输出顶点w
3.2.2将顶点w 改为“已访问”标志 3.2.3将顶点w 进栈; 3.3否则,当前顶点退栈; 具体算法:
template<class T>
void MGraph::DFSTraverse(int v) //标志数组visit 以初始化 {
top=-1; //采用顺序栈并假设不会发生上溢 cout<<vertex[v];visit[v]=1;S[++top]=v; while(top!=-1) { v=S[top]; for(j=0;j<vertexNum;j++) if(arc[v][j]==1 && visit[j]==0) { cout<<vertex[j]; visit[j]=1; S[++top]=j; Break; } If(j==vertexNum) top--; } }
(3)分别基于深度优先搜索和广度优先搜索编写算法,判断以邻接表存储的有向图中是否存在由顶点i v 到顶点j v 的路径(i j )。
解:深度优先搜索算法 int DFS(int i,int j) { Top=-1;
Visited[i]=1;stack[++top]=i;yes=0;
while(top!=-1||yes==0)
{
i=stack[top];
p=adjlist[i].firstedge;
while(p&&yes==0) //邻接点存在且还未找到
{
t=p->adjvex;
if(t==j) yes=1;
else if(Visited[t]==0){
Visited[t]=1;
stack[++top]=t;
}else p=p->next;
}
If(!p) top--;
}
return yes;
}
广度优先搜索算法:
int BFS(int i,int j)
{
front=-1;rear=-1;
visited[i]=1;queue[++rear]=i;yes=0;
while(front!=rear||yes==0)
{
i=queue[++front];
p=adjlist[i].firstedge;
while(p&&yes==0)
{
t=p->adjvex;
if(t==j) yes=1;
else if(visited[t]==0){
visited[t]=1;
queue[++rear]=t;
}else p=p->next;
}
}
return yes;
}
5、哈夫曼树、哈夫曼编码程序编译、调试、运行并形成相应报告
分析:该程序实现最多构造100个结点(数据域为整形数)的哈夫曼树,并将前8个整数按按哈弗曼树构造排好序,程序按哈弗曼的构造过程输出截图中第二行数据,哈夫曼树示意图如下
然后程序判断前8个数在该树中的位置,从根结点开始,左子树输出0,右子树
输出1,故得到程序截图中的结果。
6、分析、调试、运行拓扑排序、Prim 算法、最短路径程序,给出相应分析报告 解:
哈夫曼树及哈弗曼编码程序调试运行结果
分析:该拓扑排序程序是基于图的存储结构,选择了图的邻接表的存储结构,并加以改造而实现的,程序要求先自己构造一个合法的AOV 网,(比如上述:先构造一个含有9个顶点(最大不超过20个),11条边的图,然后输入顶点值,再依次输入具有邻接关系的顶点对),程序最终输入一种拓扑排序。
分析:Prim 算法基于的存储结构。
(1)图的存储结构:由于在算法执行过程中,需要不断读取任意两个顶点之间边的权值,所以采用邻接矩阵存储,且矩阵为对角矩阵,所以又可以采用压缩存储仅存储主对角线以下元素。
(2)候选最短边集:设置了一个数组minedge[v]表示候选最短边集,数组元素包括adjvex 和lowcost 两个域,分别表示候选最短边的邻接点和权值。
程序最终得到一颗最小生成树。
调试及运行Prim 算法验证结果图
调试及运行拓扑排序结果图
分析:最短路径问题是图的应用问题,该程序中使用Dijkstra 算法,应用贪心法进行算法设计。
图采用邻接矩阵存储。
实现:只要输入有向图的全部信息,和源点,就可以得到至其他顶点的最优路径。
调试及运行最短路径的程序结果图。