南邮 数据结构作业答案讲解

合集下载

南邮陈慧南版数据结构课后习题答案

南邮陈慧南版数据结构课后习题答案

}
65
if (p==root) root=root->lchild;
else q->rchild=p->lchild;
37
e=p->element;
25
delete p;
return true;
14
32
}
7.8 以下列序列为输入,从空树开始构造AVL搜索树。 (1)A,Z,B,Y,C,X (2)A,V,L,T,R,E,I,S,O,K
int i,j,top=-1; //top为栈顶元素的下标 ENode<T> *p; for(i=0; i<n; i++)
if(!InDegree[i]) {
F
B
A
FB
A
E
E
G
D
C
GD
C
Void LinkedGraph<T>::DFS1(int v,bool visited[],int parent[])
{ Enode *w; visited[v]=true; for(w=g.firstarc; w; w=w->nextarc) if(!visited[w->adjvex]) { DFS1(w->adjvex,visited,parent) parent[w->adjvex]=v; }
{ q.DeQueue(v);
//队首元素出队
for (w=a[v];w;w=w->nextarc)
if (! visited[w->adjvex])
{ cout <<“ “<< w->adjvex;
visited [w->adjvex]=true;

南邮陈慧南版数据结构课后习题答案

南邮陈慧南版数据结构课后习题答案

template <class T> void LinkedStack<T>::SetNull() { Node<T> *q; while (top) { q=top->link; delete top; top=q; } }
i k(循环次数) 2*i 1 1 21<n 2 2 22<n 2k-1 n 2k<n 2k<n, k<log2n, k=log2n
划线语句的执行次数为 log2n。O(log2n) (3) for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for (int k=1;k<=j;k++) x++;
习题三(第50页)
3.1 设A、B、C、D、E五个元素依次进栈(进栈后可立即出栈),问 能否得到下列序列。若能得到,则给出相应的push和pop序列;若不 能,则说明理由。 1) A,B,C,D,E 2) A,C,E,B,D 3) C,A,B,D,E 4) E,D,C,B,A 答:2)和3)不能。对2)中的E,B,D而言,E最先出栈则表明,此 时B和D均在栈中,由于,B先于D进栈,所以应有D先出栈。同理3) 也不能。 (1)能。 push,pop,push,pop,push,pop,push,pop,push,pop (4)能。 push,push,push,push,push,pop,pop,pop,pop,pop
template <class T> bool LinkedStack<T>::IsEmpty() const { return !top; }
template <class T> bool LinkedStack<T>::IsFull() const { return false; }

南邮数据结构课后习题课27页PPT

南邮数据结构课后习题课27页PPT

南邮数据结构Βιβλιοθήκη 后习题课26、机遇对于有准备的头脑有特别的 亲和力 。 27、自信是人格的核心。
28、目标的坚定是性格中最必要的力 量泉源 之一, 也是成 功的利 器之一 。没有 它,天 才也会 在矛盾 无定的 迷径中 ,徒劳 无功。- -查士 德斐尔 爵士。 29、困难就是机遇。--温斯顿.丘吉 尔。 30、我奋斗,所以我快乐。--格林斯 潘。
66、节制使快乐增加并使享受加强。 ——德 谟克利 特 67、今天应做的事没有做,明天再早也 是耽误 了。——裴斯 泰洛齐 68、决定一个人的一生,以及整个命运 的,只 是一瞬 之间。 ——歌 德 69、懒人无法享受休息之乐。——拉布 克 70、浪费时间是一桩大罪过。——卢梭

南邮数据结构实验三

南邮数据结构实验三

南邮数据结构实验三南京邮电大学数据结构实验三、链表的基本操作实验目的本次实验的主要目的是理解链表的概念,掌握链表的基本操作,包括链表的创建、插入、删除和遍历。

实验内容本次实验分为以下几个部分:1、链表的定义与创建1.1 链表的概念链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

链表可以分为单链表、双链表和循环链表等不同类型。

本次实验将创建一个单链表。

1.2 链表节点的定义链表节点包含两个成员变量,分别是数据域和指针域。

数据域用于存储节点的数据,指针域指向下一个节点。

1.3 链表的创建在主函数中创建一个空链表,并添加一些初始数据,用于后续的操作。

2、链表的插入操作2.1 插入节点的位置链表的插入操作需要指定节点插入的位置,可以在链表的头部、尾部或者中间插入新节点。

2.2 插入节点的操作根据所选位置,在链表中插入新节点,并更新相应的指针。

3、链表的删除操作3.1 删除节点的位置链表的删除操作需要指定节点删除的位置,可以删除头节点、尾节点或者中间节点。

3.2 删除节点的操作根据所选位置,删除链表中的节点,并更新相应的指针。

4、链表的遍历操作通过循环遍历链表的所有节点,并输出每个节点的数据。

附件说明本文档涉及以下附件:附件1:源代码附件2:实验报告法律名词及注释本文所涉及的法律名词及注释如下:1、数据结构:数据的存储方式和操作组成的集合。

在计算机科学中,数据结构是计算机中存储、组织数据的方式。

2、链表:链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

3、节点:链表中的一个元素,包含数据域和指针域。

4、数据域:节点中存储的数据。

5、指针域:节点中指向下一个节点的指针。

6、插入操作:在链表中插入一个新节点。

7、删除操作:从链表中删除一个节点。

8、遍历操作:按照一定的顺序访问链表中的所有节点。

全文结束。

数据结构习题答案解读

数据结构习题答案解读

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

南邮 数据结构A 习题9参考答案

南邮 数据结构A 习题9参考答案

9.1(2)(3)⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0000011000110101000100100010010000009.29.4template <class T>void LGraph<T>::Degree(int *in) { for (int i=0;i<n;i++) { in[i]=0;}ENode<T> *p; for (i=0; i<n; i++) { p=a[i];while (p){in[p->adjvex]++;p=p->nextarc;}}for (i=0;i<n;i++){cout<<i<<": " << in[i] << "; " << endl;}}9.69.139.16设AOE网如图题9-4所示。

求各事件的可能的最早发生时间和允许的最迟发生时间,各活动可能的最早开始时间河运许的最晚开始时间,以及关键活动和关键路径及其长度。

关键路径:a 2,a 7,a 9. 长度:239.17使用普里姆算法以1为源点,画出图题9-5的无向图的最小代价生成树。

9.18使用克鲁斯 卡尔算法以,画出图题9-5的无向图的最小代价生成树9.21用迪杰斯特拉算法求图题9-6的有向图中以顶点A 为源点的单源最短路径。

写出一维数组d 和 path 在执行该算法的过程中各步的状态。

9.22用弗洛伊德算法求图题9-6的有向图的所有顶点之间的最短路径。

写出二维数组d 和path 在执行该算法的过程中各步的状态。

(1)初始状态dA pathAdCpathCdDpathDdE dG。

(完整版)数据结构课后习题答案

(完整版)数据结构课后习题答案

第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。

每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。

南邮数据结构答案

南邮数据结构答案

第1 章绪论一、基础题1. A2. C3. C4. A5. C二、扩展题1.数据是计算机加工处理的对象;数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理;数据项是组成数据元素的、不可分割的最小单位。

2.数据结构是按某种逻辑关系组织起来的数据元素的集合,使用计算机语言描述并按一定的存储方式存储在计算机中,并在其上定义了一组运算。

3.集合结构、线性结构、树形结构和图形结构。

集合结构中,元素之间没有关系;线性结构中,元素之间存在一对一的关系;树形结构中,元素之间存在一对多的关系,其中最多只有一个元素没有前驱元素,这个元素就是根;图形结构中,元素之间存在多对多的关系。

4.顺序存储、链式存储、索引存储和散列存储。

5.一个算法是对特定问题的求解步骤的一种描述,是指令的有限序列。

其特征包括:➢输入:算法有零个或多个输入➢输出:算法至少产生一个输出➢确定性:算法的每一条指令都有确切的定义,没有二义性。

➢能行性/可行性:可以通过已经实现的基本运算执行有限次来实现➢有穷性:算法必须总能在执行有限步之后终止6.联系:程序是计算机指令的有序集合,是算法用某种程序设计语言的表述,是算法在计算机上的具体实现。

区别:在语言描述上不同,程序必须是用规定的程序设计语言来写,而算法的描述形式包括自然语言、伪代码、流程图和程序语言等;算法所描述的步骤一定是有限的,而程序可以无限地执行下去,比如一个死循环可以称为程序,但不能称为算法。

7.正确性:算法的执行结果应当满足功能需求,无语法错误,无逻辑错误简明性:思路清晰、层次分明、易读易懂,有利于调试维护健壮性:当输入不合法数据时,应能做适当处理,不至于引起严重后果效率:有效使用存储空间和有高的时间效率最优性:解决同一个问题可能有多种算法,应进行比较,选择最佳算法可使用性:用户友好性8(1)执行次数为n-1(n>=2),n=1时执行1次;时间复杂度为O(n)。

(2)执行次数为⌈log3n⌉;时间复杂度为O(logn)(3) 执行次数为n2;时间复杂度为O(n2)(4)执行次数为⌊√n⌋ + 1;时间复杂度为O(√n)第2 章线性表1.A2.D3.B4.C5.B6.D7.D8.C9.A10.D1.编写程序实现对顺序表逆置。

南邮_数据结构作业答案讲解

南邮_数据结构作业答案讲解

A: 1010 B: 1011 C: 100 D: 00 E: 01 F: 11
加权路径长度:WPL=(2+3)×4+5×3+(7+9+12)×2=91
2019/11/18
23
7-4为什么说对半搜索算法只适用于顺序有序表的 情况?为什么说顺序搜索可用于顺序表和链表, 也不受表的有序性限制?
解: 1、对半搜索算法必须针对顺序存储的有序表,要 求满足两个条件:
前置条件:x<y
后置条件:删除有序表中元素值在x和y之间( 含x和y)的所有元素。
2019/11/18
12
void Search_Delete(List *lst, T x, T y)
{
if (lst->Size==0)
{ printf(“The list is empty”); return -1; }
2019/11/18
6
第三章 习题讲解
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得 到,则给出相应的push和pop序列;若不能,则 说明理由。 (2)A,C,E,B,D
(2)不能得到该序列,在E出栈时,B和D在栈 中,B比D先进栈,所以D应比B先出栈。
2019/11/18
9
第四章 习题讲解
4-1. 设线性表采用顺序表示方式,并假定顺序表是 有序的(设表中元素已按非递减次序排列)。编写 函数,实现线性表的如下运算:
(1)int Search_Insert(List *lst,T x) 后置条件:在有序的顺序表中搜索元素x。
•若x在表中,则返回x在表中的位置。 •否则,若表未满,则在表中插入新元素x,并且插 入后,线性表仍然是有序的,返回新元素x的位置; •若表已满,无法插入新元素,则返回-1。

南邮数据结构A习题9参考答案.docx

南邮数据结构A习题9参考答案.docx

9.1(3)「00000o-100100 010010 001010 110001 100000生成的邻接表9.4template <class T>void LGraph<T>::Degree(int *in) ( -for (int i=0;i<n;i++){in[i]=0;}ENode<T> *p;for (i=0; i<n; i++)P=a[i];while (p)(in[p->adjvex]++;p=p->nextarc;}}for (i=0;i<n;i++)(cout«i«n: " « in[i] «" « endl;}以2为起始顶点的深度优先搜索得到的生成树9.139. 16设A0E网如图题9-4所示。

求各事件的可能的最早发生时间和允许的最迟发生时间,各活动可能的最早开始时间河运许的最晚开始时间,以及关键活动和关键路径及其长度。

9.6O54333333352252222512511④所有可能的拓扑序列(b)按邻接表的拓扑序9.17以2为起始顶点的广度优先题图9.4关键路径:a.2, a?, ag. 长度:239. 17使用普里姆算法以1为源点,画出图题9-5的无向图的最小代价生成树。

9. 18使用克鲁斯卡尔算法以,画出图题9-5的无向图的最小代价生成树9. 21用迪杰斯特拉算法求图题9-6的有向图中以顶点A 为源点的单源最短路径。

写出一维数 组d 和path 在执行该算法的过程中各步的状态。

源点终点 最短路径 路径长度 AB (A, B) 3C (A, B, C) 4D (A, D) 4E (A, B, E) 4G _ 8Sd[A]path[A] d[B] path[B] d[C] path[C] d[D] path[D] d[E] path[E] d[G] path[G] A 0,-1 3, A °°, -1 4, A 5, A °°, -1 B 0,-1 3, A 4,B 4, A 4,B °°, -1 C 0,-1 3, A4,B4, A4,B°°, -1D 0,-1 3, A 4,B 4, A 4,B 8, -1E 0,-1 3, A 4,B 4, A 4,B °°, "I9. 22用弗洛伊德算法求图题9-6的有向图的所有顶点之间的最短路径。

南邮数据结构课后习题课

南邮数据结构课后习题课

3.2 设计2个栈共享一个数组,画出示意图。 0 n-1
↑ bottom1
↑ ↑ ↑ ⑷写出下列表达式的后缀表达式: bottom2 ① top1 (a+b)/(c+d)top2 ab+cd+/
② b^2-4*a*c b2^4a*c*定义一个足够大的栈空间。该空间的两端分别设为两个栈 的栈底,用bottom1和bottom2指示,让两个栈的栈顶,用 top1和top2指示,都向中间伸展,直到两个栈的栈顶相遇, 才会发生溢出。 栈空,两栈均空:top1=0且 top2=n-1 栈满:top1=top2-1
答: 划线语句的执行次数为 n-1 。O(n)
(2)i=1; x=0; do { x++; i=2*i; } while (i<n);
划线语句的执行次数为 log2n。O(log2n) (3) for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for (int k=1;k<=j;k++) x++; 划线语句的执行次数为 n(n+1)(n+2)/6 。O(n3)
O(n)
2.5 在类SingleList中增加一个成员函数,将单链表 逆置运算,直接实现该函数并分析其时间复杂度。 template <class T> void SingleList<T>::invert() { Node<T> *p=first,*q; first=NULL; while (p) { q=p->link; p->link=first; first=p; p=q; } }

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:---第一章:数组1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。

答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。

如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。

2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。

答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。

遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。

---第二章:链表1. 题目:给定一个链表,判断链表中是否存在环。

答案:使用快慢指针法,定义两个指针,一个指针每次向前移动一个节点,另一个指针每次向前移动两个节点。

如果存在环,则两个指针必定会相遇。

2. 题目:给定一个链表,删除链表的倒数第N个节点。

答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。

此时第二个指针指向的节点即为要删除的节点。

---第三章:栈和队列1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。

答案:使用辅助栈来保存当前栈中的最小元素。

每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入辅助栈。

2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大元素。

答案:使用双端队列来保存当前队列中的最大值。

每次入队操作时,将当前元素与双端队列的末尾元素比较,只有当前元素较大才将其压入双端队列。

---第四章:树和二叉树1. 题目:给定一个二叉树,判断它是否是平衡二叉树。

答案:通过递归遍历二叉树的每个节点,计算每个节点的左子树高度和右子树高度的差值。

如果任意节点的差值大于1,则该二叉树不是平衡二叉树。

数据结构_南京邮电大学中国大学mooc课后章节答案期末考试题库2023年

数据结构_南京邮电大学中国大学mooc课后章节答案期末考试题库2023年

数据结构_南京邮电大学中国大学mooc课后章节答案期末考试题库2023年1.向最大堆84,49,82,26,29,46依次插入元素94,99,89,80,94,最终得到的最大堆是____________(提示:堆的元素插入操作需调用AdjustUp方法,请将答案表示成元素序列,并用半角逗号相隔,答案中不要有空格)。

参考答案:99,94,84,89,94,46,82,26,49,29,802.设有5×8的数组A,其每个元素占2个字节,已知A[0][4]在内存中的地址是120,按列优先顺序存储,A[2][6]的地址是_________ 。

参考答案:1443.以下选项_____是下图的深度优先遍历序列。

【图片】参考答案:K,D,A,B,E,C,F,G,J,H,I4.对最大堆序列95,61,66,9,19,27执行1次删除操作(提示:对优先级队列执行删除操作默认删除堆顶元素)后得到最大堆序列_____________(提示:堆元素删除操作需调用AdjustDown方法,请将答案表示成元素序列,并用半角逗号相隔,答案中不要有空格)。

参考答案:66,61,27,9,195.求该方法的渐近时间复杂度为__________.(注意填写答案时不要有空格,用x^y的方式表达x的y次方)void aFunc(int n) { for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { printf("Hello World\n"); } }}O(n^2)6.已知图的边集合:【图片】若采用邻接表存储,则顶点4对应的边结点链表中共有_________个边结点。

参考答案:27.用克鲁斯卡尔算法构造下图的最小代价生成树,第一条被加入生成树上的边一定是(E,C)。

【图片】参考答案:正确8.假设一棵含有18个结点的完全二叉树中,按层次从上到下、每层结点从左到右的顺序,从0开始编号,则编号为14的结点的左孩子编号为_______(如果孩子不存在,则填写NULL)。

南邮通达大数据结构B期中模拟试卷及问题详解

南邮通达大数据结构B期中模拟试卷及问题详解

南京邮电大学通达学院 2014/2015学年第一学期《数据结构A》期中模拟试卷本试卷共4页;考试时间100分钟;院(系) 班级学号姓名一、填空题(每题4分,共5题)1.四种基本的数据逻辑结构是:___________、___________、___________、___________2.在数据结构中,数据的逻辑结构分线性结构和___________ 。

3.对于栈只能在_______插入和删除元素。

4.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放的存储器内,该数组按行存放,元素A[5][8]的地址为。

5.若一课二叉树的前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为_________________二、选择题(每题4分,共5题)1.设有一个栈,元素的进栈次序为A,B,C,D,E,下列__________是不可能的出栈序列。

A. E,A,B,C,DB. B,C,D,E,AC. A,B,C,D,ED. E,D,C,B,A2.在深度为5的满二叉树中,叶子节点的个数为__________A.32B.31C.16D.153.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为.A.CBEFDA B. FEDCBA C. CBEDFA D.不定4.已知中缀表达式为a*(b+c)-d/e,请问下列哪个为正确的后缀表达式__________A.abc+*de/-B.bc+a*de/-C.bc+*a/de-D.abc+*de/-5.一棵具有n个结点的完全二叉树的树高度(深度)是()A.⎣logn⎦+1 B.logn+1 C.⎣logn⎦ D.logn-1三、简答题(每题10分,共6题)1.下图所示的森林:(1)求树(a)的先根序列和后根序列;(2)求森林先序序列和中序序列;(3)将此森林转换为相应的二叉树;(a)(b)2.设有正文AADBAACACCDACACAAD,字符集为A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。

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

0 0 6 0 0 行三元组: 0 2 6 列三元组: 1 0 3


3
0
0
0
7


1
0

3


0
2
6

0 0 0 0 0
1 4 7
3 2 8

0
0
8
10
0


3
2

8


3
3
10 Fra bibliotek 0 0 0 0 9
int i,j,sum=0;
for (i=0;temp[i]<x&&i<n;i++); //找到首个大于等于x的元素位置i
if(i>n-1) return; //没有符合条件的元素
ffoorr ((jj==ii;;ljs<tn[j;]<) =y&&j<n;j++); if (lst[j]>y//)找到首个//大大于于yy的的元元素素前位移置j
第一章 习题讲解
1-19.确定下列各程序段的程序步,确定划线语句的执行次数, 计算它们的渐近时间复杂度。 (1) i=1; k=0; do { k=k+10*i; i++; } while(i<=n-1) 划线语句的执行次数为 n-1 ,渐近时间复杂度为O(n)
(2)i=1; x=0; do{ x++; i=2*i; } while (i<n);
前置条件:x<y
后置条件:删除有序表中元素值在x和y之间( 含x和y)的所有元素。
02.03.2020
12
void Search_Delete(List *lst, T x, T y)
{
if (lst->Size==0)
{ printf(“The list is empty”); return -1; }
}
02.03.2020
4
2-12.设计一个算法,将单链表中结点以逆序排列。逆序的单 链表中的结点均为原表中的结点。 Node* pInvert(Node* first) { Node *p=first, *q; first=NULL; while (p) { q=p->Link; p->Link=first; first=p; p=q; } return first; }
lst.Size++;
return i;
//插入新元素并返回该元素的位置
}
02.03.2020
11
4-1. 设线性表采用顺序表示方式,并假定顺序表是 有序的(设表中元素已按非递减次序排列)。编写 函数,实现线性表的如下运算:
(2)void Search_Delete(List *lst, T x,T y)
02.03.2020
9
第四章 习题讲解
4-1. 设线性表采用顺序表示方式,并假定顺序表是 有序的(设表中元素已按非递减次序排列)。编写 函数,实现线性表的如下运算: (1)int Search_Insert(List *lst,T x)
后置条件:在有序的顺序表中搜索元素x。 •若x在表中,则返回x在表中的位置。 •否则,若表未满,则在表中插入新元素x,并且插 入后,线性表仍然是有序的,返回新元素x的位置; •若表已满,无法插入新元素,则返回-1。
(4)x=n;y=0; while(x>=(y+1)*(y+1)) y++;
划线语句的执行次数为 n1/2 ,渐近时间复杂度为O(n1/2)
02.03.2020
2
第二章 习题讲解
2-4.Loc(A[i][j][k])=134+(i*n*p+j*p+k)*2
02.03.2020
3
2-9. 设有长度为n 的一维整型数组A,设计一个算法,将原数 组中的元素以逆序排列
37
25 14
45 91
76
56
建成的二叉树 65
02.03.2020
26
8-1 建立37,45,91,25,14,76,56,65为输入 时的二叉搜索树,再从该树上依次删除76,45,则
树形分别如何?
37
25
45
14
91
56
删除76后 65
02.03.2020
27
8-1 建立37,45,91,25,14,76,56,65为输入 时的二叉搜索树,再从该树上依次删除76,45,则
划线语句的执行次数为 log2n ,渐近时间复杂度为O(log2n)
02.03.2020
1
(3) for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for (int k=1;k<=j;k++) x++;
划线语句的执行次数为n(n+1)(n+2)/6 ,渐近时间复杂度为O(n3)
sum=j-i; lst[i++]=lst[j++]; while(ej<lsne) lst[i++]=lst[j/+/小+]于; 等于//删y的除元su素m删个除元素 n=n-sum; { j++; n--; }
}
02.03.2020
13
4.6 给出下列稀疏矩阵的行优先和列优先顺序存储 的行三元组和列三元组表示。
02.03.2020
5
第三章 习题讲解
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得 到,则给出相应的push和pop序列;若不能,则 说明理由。 (1)A,B,C,D,E
(1)能得到该序列。 相应的push和pop序列为:push(A); pop(); push(B); pop(); push(C); pop(); push(D); pop(); push(E); pop();
(1)无序树:9棵
3棵
6棵
(2)有序树:12棵
6棵
6棵
(3)二叉树:30棵
各6棵
02.03.2020
15
6-3. 设在度为m的树中,度为1,2,…,m的节点 个数分别为n1,n2,…,nm,求叶子节点的数目。
设度为0的节点个数为n0则: 树的总度数=节点总个数-1 即:1*n1+2*n2+…+m*nm =n0+ n1+n2+n3+….+ nm-1 因此叶子节点数目为:n0=n2+2*n3+….+ (m-1)nm+1
02.03.2020
6
第三章 习题讲解
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得 到,则给出相应的push和pop序列;若不能,则 说明理由。 (2)A,C,E,B,D
(2)不能得到该序列,在E出栈时,B和D在栈 中,B比D先进栈,所以D应比B先出栈。
02.03.2020
17
6-6. 设对一棵二叉树进行中序遍历和后序遍历的结果 分别为:
(1)中序遍历 (B D C E) A (F H G ) (2)后序遍历 (D E C B)(H G F) A 画出该二叉树。
A
B
F
C
G
D
E
H
02.03.2020
18
6-7 写出下图中二叉树的先序、中序和后序遍历结果
② if (IsFull(lst)) //或if(lst->Size==lst->maxList) return -1; //表已满时,无法插入,返回-1
for (j=lst->Size-1; j>=i; j--)
lst->Element[j+1]=lst->Element[j];
③ lst->Element[i]=x; //新元素即插入位置i处
先序:DEHFJGCKAB 中序:HEJFGKCDAB 后序:HJKCGFEBAD
D
E
A
H
F
B
J
G
C K
02.03.2020
19
6-8.设二叉树以二叉链表存储,试编写求解下列问 题的递归算法: (3)求一棵二叉树中的叶结点个数;
int SizeL(BTree Bt) { return SizeofLeaf(Bt.Root); } int SizeofLeaf(BTNode *p) {
A: 1010 B: 1011 C: 100 D: 00 E: 01 F: 11
加权路径长度:WPL=(2+3)×4+5×3+(7+9+12)×2=91
02.03.2020
23
7-4为什么说对半搜索算法只适用于顺序有序表的 情况?为什么说顺序搜索可用于顺序表和链表, 也不受表的有序性限制?
解: 1、对半搜索算法必须针对顺序存储的有序表,要 求满足两个条件:
void Invert(T elements[], int length) //length数组长度 //elements[]为需要逆序的数组
{ T e; for (int i=1;i<length/2;i++) { e=elements[i-1]; elements[i-1]=elements[length-i]; elements[length-i]=e; }
if(!p) return 0;
相关文档
最新文档