数据结构第二单元测验答案
智慧树知到《数据结构》章节测试答案
第1章单元测试1、算法的时间复杂度取决于___。
答案:A和B2、数据在计算机内存中的表示是指()答案:数据的存储结构3、算法指的是()答案:求解特定问题的指令有限序列4、在数据结构中,与所使用的计算机无关的数据结构是()答案:逻辑7、某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为( )。
答案:1448、算法能正确地实现预定功能的特性称为算法的()。
答案:正确性第2章单元测试1、链表不具备的特点是()。
答案:可随机访问任意一个结点3、线性表的顺序存储表示优于链式存储表示。
答案:错4、顺序存储结构的缺点是不便于修改,插入和删除需要移动很多结点。
答案:对5、在设头、尾指针的单链表中,与长度n有关的操作是( )。
答案:删除最后一个结点6、设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B间插入结点X的操作序列为( )。
答案:q->next=s; s->next=p;7、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )。
答案:用尾指针表示的循环单链表8、在一个单链表中,若p所指节点不是最后节点,在p之后插入s所指节点,则执行( )。
答案:s->link=p->link;p->link=s;9、在双向链表存储结构中,删除p所指的结点时须修改指针____。
答案:p->next->prior=p->prior; p->prior->next=p->next;10、若事先不知道线性表的长度,则处理线性表时较好的存储结构是( )。
答案:单链表11、向一个有127个元素的顺序表中插入一个新元素并保存,原来顺序不变,平均要移动( )个元素。
答案:63.512、某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为( )。
数据结构第二单元练习题答案
数据结构第二单元练习题答案一、选择1.树最适合用来表示( )A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据2.在下述结论中,正确的是( )①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③B.②③④C.②④D.①④3.以下说法正确的是()A.任何一棵二叉树中至少有一个结点的度为2B.任何一棵二叉树中每个结点的度都为2C.任何一棵二叉树的度肯定等于2D.任何一棵二叉树的度可以小于24.在下列情况中,可称为二叉树的是( )A.每个结点至多有两棵子树的树B.哈夫曼树C.每个结点至多有两棵子树的有序树D.每个结点只有一棵右子树E.以上答案都不对5.深度为h的满m叉树的第k层有( )个结点(1=<k=<h)A.m k-1B.m k-1C.m h-1D.m h-16.在一棵高度为k的满二叉树中,结点总数为( )A.2k-1B.2kC.2k-1D.⎣log2k⎦+17.在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为( )个A.4B.5C.6D.78.具有10个叶结点的二叉树中有( )个度为2的结点。
A.8B.9C.10D.ll9.二叉树有n个结点,则其深度为()A.n-1B.nC.(log2n)+`1D.无法确定该题是二叉树不是完全二叉树由二叉树结点的公式:n=n0+n1+n2=n0+n1+(n0-1)=2n0+n1-1,因为n=1001,所以1002=2n0+n1,在完全二叉树树中,n1只能取0或1,在本题中只能取0,故n=501,因此选E。
10.一个具有1025个结点的二叉树的高h为( )A.11 B.10 C.11至1025之间 D.10至1024之间11.一棵具有 n个结点的完全二叉树的深度是( )A.⎣log2n⎦+1B.log2n+1C.⎣log2n⎦D.log2n-112.将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度( )A.4B.5C.6D.713.将一棵有100个结点的完全二叉树从根结点这一层开始,每一层上从左到右依次对结点编号,根结点的编号为1,则编号为49的结点的左孩子编号为()A.98B.99C.50D.48利用二叉树的性质5114.在完全二叉树中,若一个结点是叶结点,则它没( )A.左子结点B.右子结点C.左子结点和右子结点D.左子结点,右子结点和兄弟结点15.当一棵有n个结点的二叉树按层次从上到下,同层次从左到右将数据存放在一维数组A[l..n]中时,数组中第i个结点的左孩子为( )A.A[2i](2i=<n)B.A[2i+1](2i+1=<n)C.A[i/2]D.无法确定16.在下列存储形式中,( )不是树的存储形式?A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法17.以下说法错误的是()A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达B.三叉链表,二叉树求双亲运算很容易实现C.在二叉链表上,求左.右孩子等很容易实现D.在二叉链表上,求双亲运算的时间性能很好18.对二叉树从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用()次序的遍历实现编号。
数据结构第二章课后答案
数据结构第二章课后答案数据结构第二章课后答案1. 线性表1.1 数组实现线性表Q1. 请说明线性表的定义,并结合数组实现线性表的特点进行解释。
线性表是由n(n≥0)个数据元素构成的有序序列,其中n表示线性表的长度。
数组实现线性表的特点是使用一组具有相同数据类型的连续存储空间存储线性表中的元素,通过下标访问和操作元素。
A1. 线性表的定义指出,线性表是由若干个数据元素组成的有序序列。
具体地,在数组实现线性表中,我们将元素存储在一组连续的内存空间中,通过下标访问和操作元素。
由于数组的存储空间具有连续性,这样的实现方式可以在O(1)的时间复杂度下进行元素的访问和修改操作。
1.2 链表实现线性表Q2. 请说明链表实现线性表的特点,并与数组实现进行比较。
链表实现线性表的特点是通过指针将线性表中的元素按照节点的形式连接起来,每个节点包含了存储的元素和指向下一个节点的指针。
与数组实现相比,链表的插入和删除操作更为高效,但是访问某个位置的元素需要从头开始遍历,时间复杂度较大。
A2. 链表实现线性表的特点是通过使用节点和指针将线性表中的元素连接起来。
每个节点中包含了一个存储的元素和指向下一个节点的指针。
链表的插入和删除操作的时间复杂度为O(1),因为只需要改变指针的指向即可。
但是,访问某个位置的元素需要从头开始遍历链表,所以时间复杂度为O(n)。
2. 栈和队列2.1 栈的定义和基本操作Q3. 请给出栈的定义和基本操作。
栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作,该端称为栈顶。
栈的基本操作包括入栈(push)和出栈(pop),分别用于将元素压入栈和将栈顶元素弹出。
A3. 栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作。
这个特定的一端称为栈顶,而另一端称为栈底。
栈的基本操作包括入栈(push)和出栈(pop)。
入栈操作将一个元素压入栈顶,出栈操作将栈顶元素弹出。
2.2 队列的定义和基本操作Q4. 请给出队列的定义和基本操作。
数据结构练习题第二章答案
数据结构练习题第二章答案一、选择题1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一的关系B. 元素之间存在一对多的关系C. 元素之间存在多对多的关系D. 元素之间存在一对一或一对多的关系答案:D2. 栈(Stack)是一种特殊的线性表,其特点是:A. 允许在表的一端进行插入和删除操作B. 允许在表的两端进行插入和删除操作C. 只能在表的两端进行插入和删除操作D. 只能在表的中间进行插入和删除操作答案:A3. 队列(Queue)与栈的主要区别在于:A. 队列是先进先出(FIFO),栈是先进后出(LIFO)B. 栈是先进先出(FIFO),队列是先进后出(LIFO)C. 队列和栈都是先进先出(FIFO)D. 队列和栈都是先进后出(LIFO)答案:A二、简答题1. 什么是链表?链表有哪些基本操作?答案:链表是一种由一系列节点组成的线性数据结构,每个节点包含数据部分和指向下一个节点的指针。
链表的基本操作包括插入节点、删除节点、查找节点和遍历链表。
2. 线性表的顺序存储结构和链式存储结构有何区别?答案:顺序存储结构使用连续的存储单元来存储数据元素,如数组。
链式存储结构不要求数据元素在存储空间中连续,每个元素包含指向下一个元素的指针,如链表。
三、编程题1. 编写一个函数,实现在单链表中插入一个新节点到指定位置。
```c#include <stdio.h>#include <stdlib.h>typedef struct Node {int data;struct Node *next;} Node;Node* createNode(int data) {Node *newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;return newNode;}void insertNode(Node head, int position, int data) {Node *newNode = createNode(data);if (position == 0) {newNode->next = *head;*head = newNode;} else {Node *current = *head;for (int i = 0; current != NULL && i < position - 1; i++) {current = current->next;}if (current == NULL) return; // Position is greater than the number of nodesnewNode->next = current->next;current->next = newNode;}}int main() {Node *head = NULL;insertNode(&head, 0, 10);insertNode(&head, 1, 20);// Print the list to verify the insertionNode *current = head;while (current != NULL) {printf("%d ", current->data);current = current->next;}return 0;}```四、分析题1. 分析栈的后进先出(LIFO)特性在实际应用中的优势和局限性。
数据结构测验答案
数据结构第二单元测验答案一、选择题1.由 3个结点可以构造出多少种不同的有向树( )A.2B.3C.4D.52.由 3个结点可以构造出多少种不同的二叉树( )A.2B.3C.4D.53.二叉树的第 I 层上最多含有结点数为 ( )A.2 IB.2I-1 -1C.2 I-1D.2I -14.一棵二叉树高度为 h, 所有结点的度或为 0,或为 2,则这棵二叉树最少有 ( ) 结点A.2hB.2h-1C.2h+1D.h+1除第一层外 , 每层最少 2 个结点5.一棵树高为 K 的完全二叉树至少有 ( ) 个结点A.2 k– 1B.2k-1 –1 C . 2k-1 D.2k6.深度为 6 的二叉树最多有 () 个结点A. 64 B. 63 C.32 D.317.设树 T 的度为 4,其中度为1,2,3 和 4 的结点个数分别为4,2,1,1 则 T 中的叶子数为( )A.5B.6C.7 D . 88.若一棵二叉树具有10 个度为 2 的结点, 5 个度为 1 的结点,则度为 0 的结点个数是 ( )A.9B. 11C.15D.不确定9.一棵完全二叉树上有 1001 个结点,其中叶子结点的个数是( )A.250B.500C.254D.505 E .以上答案都不对10.对于有 n 个结点的二叉树 , 其高度为 ( )A.nlog2nB.log2nC.log 2n |+1D. 不确定11. 将含有 83 个结点的完全二叉树从根结点开始编号,根为序结点编号,那么编号为41 的双亲结点编号为()1 号,按从上到下. 从左到右顺A.42B.40C.21D. 2012.一个二叉树按顺序方式存储在一个维数组中,如图0 A 1 2B3C45D6 78 9 10E F11 12 13 14G H I J则结点 E 在二叉树的第()层。
A. 1B. 2C. 3D.413. 某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树A.空或只有一个结点B. 高度等于其结点数C. 任一结点无左孩子D.任一结点无右孩子14.任何一棵二叉树的叶结点在其先根. 中根 . 后根遍历序列中的相对位置 ( )A. 肯定发生变化B.有时发生变化C. 肯定不发生变化D.无法确定15. 二叉树线索化后,仍不能有效求解的问题是()A.先序线索二叉树中求先序后继B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前驱D. 后序线索二叉树中求后续后继一共有两种情况 : 一个是先序线索中求先序前驱和后序线索求后序后继16. 如果 T 2 是由有序树 T 转化而来的二叉树,那么T 中结点的前序就是T 2 中结点的 ( )A. 前序B. 中序C. 后序D.层次序17. 设森林 T 中有 4棵树,第一 . 二 . 三. 四棵树的结点个数分别是n1,n2,n3,n4, 那么当把森林 T 转换成一棵二叉树后,且根结点的右子树上有 ( ) 个结点。
数据结构第二章参考答案
数据结构第二章参考答案1. 线性表线性表是数据结构中最基本的一种结构,在实际应用中广泛使用。
它是一个有序的数据元素序列,其中每个元素都有唯一的前驱和后继,除了第一个元素没有前驱,最后一个元素没有后继。
2. 顺序存储结构顺序存储结构是线性表最简单的一种实现方式。
它利用一段连续的存储空间依次存储线性表的元素,存储位置是连续的。
在顺序存储结构中,插入和删除操作需要移动大量元素,因此效率较低。
3. 链式存储结构链式存储结构通过指针将线性表的各个元素链接起来。
每个元素都包含一个数据域和一个指针域,数据域用于存储数据元素,指针域用于存储下一个元素的地址。
在链式存储结构中,插入和删除操作只需要修改指针,效率较高。
4. 栈栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作,这一端称为栈顶。
栈的特点是后进先出,即最后插入的元素最先被删除。
栈的应用场景包括函数调用、表达式求值等。
5. 队列队列也是一种特殊的线性表,它允许在表的一端(队尾)插入元素,在另一端(队首)删除元素。
队列的特点是先进先出,即最先插入的元素最先被删除。
队列的应用场景包括进程调度、打印队列等。
6. 递归递归是一种解决问题的方法,通过调用自身来解决规模较小的子问题。
在数据结构中,递归广泛应用于树和图的操作中。
递归需要注意递归的边界条件和递归的停止条件,以避免无限递归的问题。
7. 树树是一种非线性的数据结构,它由n个节点组成,这些节点通过边连接起来。
树的特点是每个节点最多有一个父节点,但可以有多个子节点。
树的应用场景包括文件系统、组织结构等。
8. 二叉树二叉树是一种特殊的树结构,每个节点最多有两个子节点。
二叉树的遍历有三种方式:前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。
二叉树的应用场景包括查找、排序等。
9. 查找算法查找算法是在数据集合中寻找特定元素的过程。
常用的查找算法有顺序查找、二分查找、哈希查找等。
不同的查找算法有不同的时间复杂度和空间复杂度,对于不同规模的数据集合有不同的效率。
(完整word版)数据结构单元2练习参考答案
单元练习2一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(×)(1)线性表的链式存储结构优于顺序存储。
(×)(2)链表的每个结点都恰好包含一个指针域。
(√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
(×)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。
(×)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
(×)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
(√)(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。
(√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。
(×)(9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
(ㄨ)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。
二.填空题(1)顺序表中逻辑上相邻的元素在物理位置上必须相连。
(2)线性表中结点的集合是有限的,结点间的关系是一对一关系。
(3)顺序表相对于链表的优点是:节省存储和随机存取。
(4)链表相对于顺序表的优点是:插入、删除方便。
(5)采用顺序存储结构的线性表叫顺序表。
(6)顺序表中访问任意一个结点的时间复杂度均为O(1)。
(7)链表相对于顺序表的优点是插入、删除方便;缺点是存储密度小。
(8)在双链表中要删除已知结点*P,其时间复杂度为O(1)。
(9)在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。
(10)单链表中需知道头指针才能遍历整个链表。
(11)线性表中第一个结点没有直接前趋,称为开始结点。
(12)在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。
(13)在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n- i +1 个元素。
华文慕课数据结构与算法(上)(北京大学)章节测验答案
解忧书店 JieYouBookshop第二章单元测试1、(1分)以下哪种结构是逻辑结构,而与存储和运算无关:Which of the following structure is a logical structure regardless of the storage or algorithm:(There is only one correct answer)A、队列(queue)B、双链表(doubly linked list)C、数组(array)D、顺序表(Sequential list)答案: A2、(1分)计算运行下列程序段后m的值:Calculate the value of m after running the following program segmentn = 9; m = 0;for (i=1;i<=n;i++)for (j = 2*i; j<=n; j++)m=m+1;求m的值答案: 203、(1分)下列说法正确的是:Which options may be correct?(there are more than one correct answers)A、如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)是O(h(n))【 if f(n) is O(g(n)),g(n) is O(h(n)),then f(n) is O(h(n))】B、如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)+g(n)是O(h(n))【if f(n) is O(g(n)),g(n) is O(h(n)),so f(n)+g(n) is O(h(n))】C、如果a>b>1,logan是O(logbn),但logbn不一定是O(logan)【if a>b>1,logan is O(logbn),logbn may not be O(logan)】D、函数f(n)是O(g(n)),当常数a足够大时,一定有函数g(n)是O(af(n))【if f(n)是O(g(n)),When constant a is big enough ,there must be g(n) is O(af(n))】答案: A,B4、(1分)由大到小写出以下时间复杂度的序列:答案直接写标号,如:(1)(2)(3)(4)(5) (提示:系统基于字符匹配来判定答案,所以您的答案中不要出现空格)Write the following time complexity in descending sequence:Write down the answer labels such as (1)(2)(3)(4)(5). (Hint:This problem is judged by string matching, Please make sure your answer don't contain any blanks. )RUX4%GXZNDD{IAQWTCSEEJG.png答案: (5)(1)(2)(4)(3)5、(1分)已知一个数组a的长度为n,求问下面这段代码的时间复杂度:An array of a, its length is known as n. Please answer the time complexity of the following code.(There are more than one answers.)for (i=0,length=1;i<n-1;i++){for (j = i+1;j<n && a[j-1]<=a[j];j++)if(length<j-i+1)length=j-i+1;}Screen Shot 2017-09-05 at 23.31.19.pngA、如图,A选项B、如图,B选项C、如图,C选项D、如图,D选项答案: A,B第三章单元测试1、(1分)下面关于线性表的叙述中,正确的是哪些?Which of the followings about linear list are correct?(There are more than one answers.)Select the answer that matchesA、线性表采用顺序存储,必须占用一片连续的存储单元。
数据结构第2章习题参考答案
数据结构第2章习题参考答案1. 简答题1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括数据的逻辑结构和物理结构。
1.2 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。
线性结构包括线性表、栈、队列和串;非线性结构包括树和图。
1.3 数据结构的逻辑结构有哪些?数据结构的逻辑结构包括线性结构、树形结构和图形结构。
1.4 数据结构的物理结构有哪些?数据结构的物理结构包括顺序存储结构和链式存储结构。
1.5 什么是算法?算法是指求解问题的具体步骤和方法。
1.6 算法的特性有哪些?算法应具有有穷性、确定性、可行性和输入输出性。
2. 选择题2.1 在栈的顺序存储结构中,栈的存储位置是:A. 自顶向下递增B. 自底向上递增C. 自底向上递减D. 自顶向下递减答案:D2.2 下列哪个数据结构不适合表示有父子关系的数据?A. 二叉树B. 图C. 链表D. 堆答案:D2.3 对于一棵完全二叉树,叶子节点的个数为n,则树中节点的总数为:A. 2nB. 2n + 1C. nD. n + 1答案:A2.4 假设有一个长度为10的栈,初始时栈为空,若对该栈连续执行5次入栈操作,然后执行4次出栈操作,最后执行1次入栈操作,则栈中剩余的元素个数为:A. 0B. 1C. 4D. 6答案:D3. 编程题3.1 实现一个栈数据结构的基本操作,包括入栈、出栈、获取栈顶元素和判断栈是否为空。
```Pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if self.is_empty():return Nonereturn self.items.pop()def peek(self):if self.is_empty():return Nonereturn self.items[-1]```3.2 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。
《数据结构》习题及答案:第2章 线性表(第1次更新2012-3)
第2章线性表一、选择题1.表长为N 的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(),删除一个元素需要移动的元素个数为()。
【**,★】A. (N-1)/2B. NC. N+1D. N-1E. N/2F. (N+1)/2G. (N-2)/22.线性表是具有N 个()的有限序列。
【*】A、表元素B、字符C、数据元素D、数据项E、信息3.“线性表的逻辑顺序和物理顺序总是一致的。
”这个结论是()。
【*】A、正确的B、错误的C、不一定,与具体结构有关。
4.线性表采用链式存储结构时,要求内存中可用存储单元的地址()。
【*,★】A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以。
5.带头结点的单链表为空的判定条件是()。
【*】A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL6.不带头结点的单链表head 为空的判定条件是()。
【*】A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL7.非空的循环单链表head 的尾结点P 满足()。
(注:带头结点)【*】A、P->NEXT=NULLB、p=NULLC、p->next==headD、p==head8.在一个具有n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()。
【*,★】A、O(1)B、O(n)C、O(n2)D、O(nlog2n)9.在一个单链表中,若删除P 所指结点的后继结点,则执行()。
【*,★】A、p->next=p->next->nextB、p=p->next;p->next=p->next->nextC、p->next=p->next;D、p=p->next->next;10.在一个单链表中,若在P所指结点之后插入S所指结点,则执行()。
数据结构第二章习题答案
数据结构第二章习题答案数据结构第二章习题答案第一题:给定一个数组arr,其中包含n个元素,要求编写一个函数,将数组中的所有元素按照奇偶性重新排列。
奇数元素排在偶数元素之前。
请给出实现代码。
解答:```pythondef rearrange(arr):n = len(arr)left = 0right = n - 1while left < right:while arr[left] % 2 != 0 and left < right:left += 1while arr[right] % 2 == 0 and left < right:right -= 1if left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1return arr```第二题:给定一个字符串,判断其是否为回文串。
回文串是指正读和反读都相同的字符串。
要求不考虑大小写和非字母字符,只考虑字母字符。
解答:```pythondef is_palindrome(s):s = ''.join(filter(str.isalpha, s)).lower()return s == s[::-1]```第三题:给定一个链表,判断链表中是否存在环。
如果链表中存在环,则返回True,否则返回False。
解答:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef has_cycle(head):slow = fast = headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextif slow == fast:return Truereturn False```第四题:给定一个二叉树,判断其是否为平衡二叉树。
数据结构单元2 同步训练及答案
单元2 同步训练及参考答案同步训练一、单项选择题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.一个顺序表第一个元素的存储地址是100,每个元素的存储长度为4,则第5个元素的地址是()。
A.110 B.116 C.100 D.120 7.一个长度为n的顺序表中,在第i(1≤i≤n+1)个元素的位置上插入一个新元素时,需要向后移动个元素。
A.n-i B.n-i+1 C.n-i-1 D.i8.一个长度为n的顺序表中,删除第i(1≤i≤n)个元素时,需要向前移动()个元素。
A.n-i B.n-i+1 C.n-i-1 D.i9.在一个长度为n的顺序表中插入一个结点需平均移动()个结点。
A.(n+1)/2 B.n/2 C.(n-1)/2 D.n10.在一个长度为n的顺序表中删除一个结点需平均移动()个结点。
A.(n+1)/2 B.n/2 C.(n-1)/2 D.n11.在()情况下应当选择顺序表作为数据的存储结构。
A.对线性表的主要操作为插入操作B.对线性表的主要操作为插入操作和删除操作C.线性表的表长变化较大D.对线性表的主要操作为存取线性表的元素12.下列算法实现在顺序表L的第i(1≤i≤L->length+1)个结点的位置上插入值为t的元素,其中ListSize为顺序表L的容量,表中第1个结点的数据存放在数组元素L->data[0]中。
《c语言数据结构》第2章__自测卷答案
可以失败,不可以失志。
可以失望,不可以绝望。
只要眷恋奇迹,才会得到奇迹的眷恋。
第2章自测卷答案姓名班级题号一二三四五六七总分题分1310101071040100得分一、填空(每空1分共13分)1. 【严题集2.2①】在顺序表中插入或删除一个元素需要平均移动表中一半元素具体移动的元素个数与表长和该元素在表中的位置有关2. 线性表中结点的集合是有限的结点间的关系是一对一的3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时需向后移动 n-i+1 个元素4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时需向前移动 n-i 个元素5. 在顺序表中访问任意一结点的时间复杂度均为 O(1)因此顺序表也称为随机存取的数据结构6. 【严题集2.2①】顺序表中逻辑上相邻的元素的物理位置必定相邻单链表中逻辑上相邻的元素的物理位置不一定相邻7. 【严题集2.2①】在单链表中除了首元结点外任一结点的存储位置由其直接前驱结点的链域的值指示8.在n个结点的单链表中要删除已知结点*p需找到它的前驱结点的地址其时间复杂度为O(n)二、判断正误(在正确的说法后面打勾反之打叉)(每小题1分共10分)(×)1. 链表的每个结点中都恰好包含一个指针答:错误链表中的结点可含多个指针域分别存放多个指针例如双向链表中的结点可以含有两个指针域分别存放指向其直接前趋和直接后继结点的指针(×)2. 链表的物理存储结构具有同链表一样的顺序错链表的存储结构特点是无序而链表的示意图有序(×)3. 链表的删除算法很简单因为当删除链中某个结点后计算机会自动地将后续的各个单元向前移动错链表的结点不会移动只是指针内容改变(×)4. 线性表的每个结点只能是一个简单类型而链表的每个结点可以是一个复杂类型错混淆了逻辑结构与物理结构链表也是线性表!且即使是顺序表也能存放记录型数据(×)5. 顺序表结构适宜于进行顺序存取而链表适宜于进行随机存取错正好说反了顺序表才适合随机存取链表恰恰适于"顺藤摸瓜"(×)6. 顺序存储方式的优点是存储密度大且插入、删除运算效率高错前一半正确但后一半说法错误那是链式存储的优点顺序存储方式插入、删除运算效率较低在表长为n的顺序表中插入和删除一个数据元素平均需移动表长一半个数的数据元素(×)7. 线性表在物理存储空间中也一定是连续的错线性表有两种存储方式顺序存储和链式存储后者不要求连续存放(×)8. 线性表在顺序存储时逻辑上相邻的元素未必在存储的物理位置次序上相邻错误线性表有两种存储方式在顺序存储时逻辑上相邻的元素在存储的物理位置次序上也相邻(×)9. 顺序存储方式只能用于存储线性结构错误顺序存储方式不仅能用于存储线性结构还可以用来存放非线性结构例如完全二叉树是属于非线性结构但其最佳存储方式是顺序存储方式(后一节介绍)(×)10. 线性表的逻辑顺序与存储顺序总是一致的错理由同7链式存储就无需一致三、单项选择题(每小题1分共10分)( C )1.数据在计算机存储器内表示时物理地址与逻辑地址相同并且是连续的称之为:(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构( B )2.一个向量第一个元素的存储地址是100每个元素的长度为2则第5个元素的地址是(A)110 (B)108 (C)100 (D)120( A )3. 在n个结点的顺序表中算法的时间复杂度是O(1)的操作是:(A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)(B)在第i个结点后插入一个新结点(1≤i≤n)(C)删除第i个结点(1≤i≤n)(D)将n个结点从小到大排序( B )4. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变平均要移动个元素(A)8 (B)63.5 (C)63 (D)7( A )5. 链接存储的存储结构所占存储空间:(A)分两部分一部分存放结点值另一部分存放表示结点间关系的指针(B)只有一部分存放结点值(C)只有一部分存储表示结点间关系的指针(D)分两部分一部分存放结点值另一部分存放结点所占单元数( B )6. 链表是一种采用存储结构存储的线性表;(A)顺序(B)链式(C)星式(D)网状( D )7. 线性表若采用链式存储结构时要求内存中可用存储单元的地址:(A)必须是连续的(B)部分地址必须是连续的(C)一定是不连续的(D)连续或不连续都可以( B )8.线性表L在情况下适用于使用链式结构实现(A)需经常修改L中的结点值(B)需不断对L进行删除插入(C)L中含有大量的结点(D)L中结点结构复杂( C )9.单链表的存储密度(A)大于1;(B)等于1;(C)小于1;(D)不能确定( B )10.设a1、a2、a3为3个结点整数P034代表地址则如下的链式存储结构称为P034P0-->a13-->a24-->A30(A)循环链表(B)单链表(C)双向循环链表(D)双向链表四、简答题(每小题5分共10分)1. 【严题集2.3②】试比较顺序存储结构和链式存储结构的优缺点在什么情况下用顺序表比链表好?答:①顺序存储时相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的优点:存储密度大(=1?)存储空间利用率高缺点:插入或删除元素时不方便②链式存储时相邻数据元素可随意存放但所占存储空间分两部分一部分存放结点值另一部分存放表示结点间关系的指针优点:插入或删除元素时很方便使用灵活缺点:存储密度小(<1)存储空间利用率低顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作若线性表的长度变化不大且其主要操作是查找则采用顺序表;若线性表的长度变化较大且其主要操作是插入、删除操作则采用链表2 .【严题集2.1①】描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)在单链表中设置头结点的作用是什么?答:首元结点是指链表中存储线性表中第一个数据元素a1的结点为了操作方便通常在链表的首元结点之前附设一个结点称为头结点该结点的数据域中不存储线性表的数据元素其作用是为了对链表进行操作时可以对空表、非空表的情况以及对首元结点进行统一处理头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针若链表中附设头结点则不管线性表是否为空表头指针均不为空否则表示空表的链表的头指针为空这三个概念对单链表、双向链表和循环链表均适用是否设置头结点是不同的存储结构表示同一逻辑结构的问题头结点head-->datalink 头指针首元结点简而言之头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针;头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息(内放头指针?那还得另配一个头指针!!!)首元素结点是指链表中存储线性表中第一个数据元素a1的结点五、【软考题】线性表具有两种存储方式即顺序方式和链接方式现有一个具有五个元素的线性表L={2317470531}若它以链接方式存储在下列100~119号地址空间中每个结点由数据(占2个字节)和指针(占2个字节)组成如下所示:05U17X23V31Y47Z^^100120其中指针XYZ的值分别为多少?该线性表的首结点起始地址为多少?末结点的起始地址为多少?(10分)答:X= 116 Y= 0 Z= 100 首址= 108 末址= 112六、阅读分析题(10分)【严题集2.10②】指出以下算法中的错误和低效(即费时)之处并将它改写为一个既正确又高效的算法答:错误有两处:①参数不合法的判别条件不完整例如表长为10若从第一位置(i=1)删除10个元素(k=10)要求合理但会被判为非法合法的入口参数条件为(0<i≤a.length)^ (0≤k≤a.length-i)应将if ( i<1 || k<0 || i+k> a.length ) return INFEASIBLE改为:if (!((0<i≤a.length)^ (o≤k≤a.length-i))) return INFEASIBLE 第二个FOR语句中元素前移的次序错误应将for ( j = a.length; j>=i+1; j--) a.elem[j-1] = a.elem[j];改为for (j>=i+1; j = a.length; j++) a.elem[j-1] = a.elem[j];七、编程题(每题10分共40分)1. 【徐士良题集2002年1月省统考题】写出在顺序存储结构下将线性表逆转的算法要求使用最少的附加空间解:输入:长度为n的线性表数组A(1:n)输出:逆转后的长度为n的线性表数组A(1:n)C语言描述如下(其中ET为数据元素的类型):2. 【严题集2.6②】已知L是无表头结点的单链表且P结点既不是首元结点也不是尾元结点请写出在P结点后插入S结点的核心语句序列答:此题答案不唯一但若从已给定序列中挑选则限制颇多(7) Q=P;(11) P=L;(8) while(P->next!=Q)P=P->next;(10) P=Q;(4) S->next=P->next;P->next=S;3. 编写程序将若干整数从键盘输入以单链表形式存储起来然后计算单链表中结点的个数(其中指针P指向该链表的第一个结点)注:统计结点个数是【省统考样题】的要求也是教材P60 4-6计算链表长度的要求编程又简单很容易作为考题解:编写C程序如下(已上机通过):全局变量及函数提前说明:---------------------------------#include<stdio.h>#include<stdlib.h>typedef struct liuyu{int data;struct liuyu*link;}test; liuyu *p*q*r*head;int m=sizeof(test);void main () /*第一步从键盘输入整数不断添加到链表*/{int i;head=(test*)malloc(m); /*m=sizeof(test);*/p=head; i=0;while (i!=-9999){ printf("/ninput an integer [stop by '-9999']:");scanf("%d"&i);p->data=i; /* input data is saved */p->link=(test*)malloc(m); /*m=sizeof(test));*/q=p;p=p->link;}q->link=NULL; /*原先用p->link=NULL似乎太晚!*/p=head; i=0; /*统计链表结点的个数并打印出来*/ while (p->link!=NULL){printf("%d"p->data);p=p->link;i++;}printf("\n node number=%d\n"i-1); /*结点的个数不包括-9999*/}0301陈建武:3.程序中统计结点数应是i个而不是i-1.假设链表表长为ni从0开始则在统计某一结点后 i 加一此时p已指向下一个结点第一结点统计结束i为1p指向第二结点即当p指向尾结点(第n个结点)时i的值为n-1while循环条件不符(指针域为null)退出循环即得统计的结点数为n-1.所以 i 的值就是结点数不必再减一4. 请编写26个字母按特定字母值插入或删除的完整程序可自行选用顺序存储或链表结构答:#include<stdio.h> /*全局变量及函数提前说明:*/#include<stdlib.h>typedef struct liuyu{char data;struct liuyu*link;}test;liuyu *p*q*r*head;int L; /*元素的个数*/int m=sizeof(test);void build(); /* 主函数中会被调用的函数应当预先说明 */ void display();int insert_char(charchar); /*插入一个字母在第字母Y之前若无字母则加到末尾*/int delet_char(char); /* 删除元素X注意保存X的前趋元素指针! *//*---------------------------------------------------------*/void build() /*字母链表的生成*/{int i;head=(test*)malloc(m); /*m=sizeof(test);*/p=head;for(i=1;i<L;i++){ p->data=i+'a'-1; /* 'a'也可用其ASCII码97来表示 */ p->link=(test*)malloc(m); /*m=sizeof(test));*/p=p->link; }p->data=i+'a'-1;p->link=NULL;}/*---------------------------------------------------------*/ void display() /*字母链表的输出*/{p=head;while (p->link!=NULL){ printf("%c"p->data);p=p->link; }printf("%c\n"p->data);}/*---------------------------------------------------------*/ int insert_char(char Xchar Y) /*插入一个字母X在某个字母Y之前若找不到Y字母则加到末尾*/{p=head;r=(test*)malloc(m);r->data=X;if(head->data==Y){ head=r;r->link=p; }else{ while((p->data!=Y)&&(p->link!=NULL)) {q=p; p=p->link;} if(p->data==Y) { q->link=r; r->link=p; }else{p->link=r;r->link=NULL;}}L++;return(0);}/*---------------------------------------------------------*/ int delet_char(char X) /* 删除元素X注意保存X的前趋元素指针! */{ p=head;if(head->data==X){head=head->link;free(p);}else{ while((p->data!=X)&&(p->link!=NULL)){q=p;p=p->link;}if(p->data==X){ q->link=p->link;free(p); }else return(-1);}L--;return(0);}/*---------------------------------------------------------*/ void main(void) /*字母线性表的生成和输出*/{ L=26;build();display();printf("insert return value=%d\n"insert_char('L''W'));display();printf("delete return value=%d\n"delet_char('z'));display();}附:屏幕上显示的执行结果是:a b c d e f g h i j k l m n o p q r s t u v w x y zinsert return value=0a b c d 9 e f g h i j k l m n o p q r s t u v w x y z L delete return value=0a b c d e f g h i j k l m n o p q r s t u v w x y L0301陈建武修改意见:一. display()函数代码可优化为四行void display() /*字母链表的输出*/{p=head;while (p->link!=NULL)//改为while(p)因为当p指向尾结点时p不为null条件成立循环//printf()然后p被赋值为null此时循环条件不符退出正好.{ printf("%c"p->data);p=p->link; }printf("%c\n"p->data); //用while(p)此行可删}二.对int insert_char(char Xchar Y)若用带头结点的链表代码可减为10行我的程序如下(若参数没有slist p代码要多一行让q指向头指针)void InsertFind(slist pchar insertcharchar insertpos)//字母insertpos前插入字母insertchar{slist ppriornewnode; //newnode新结点pprior为插入位置结点的直接前驱newnode = new liuyu; //为新结点分配内存newnode->data = insertchar; //对结点数据域初始化while(p) //当p指向尾结点时最后一次循环{pprior = p; //pprior从头指针开始指向p的直接前驱p = p->next; //p从首元结点开始不断前移直至最后p为nullif(p&&(p->data == insertpos)) //当p为null或者结点p的数据域为所要插入的字母break; //则退出循环}newnode->next = pprior->next; //在找到的位置前插入pprior->next = newnode;}对删除结点的操作若有头结点同样可以减少代码由此可见创建一个头结点对简化程序有很大的帮助.上面的观点仅供参考不对之处请指教!。
数据结构第二单元测验题目的参考答案
数据结构第二单元测验答案一、选择题1.由3 个结点可以构造出多少种不同的有向树( )A.2B.3C.4D.52.由3 个结点可以构造出多少种不同的二叉树( d)A.2B.3C.4D.53.二叉树的第I层上最多含有结点数为(c )A.2IB.2I-1-1C.2I-1D.2I -14.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( b )结点A.2hB.2h-1C.2h+1D.h+1除第一层外,每层最少2个结点5.一棵树高为K的完全二叉树至少有( c )个结点A.2k–1B.2k-1–1C.2k-1D.2k6.深度为6的二叉树最多有( c )个结点A.64 B.63 C.32 D.317.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( )A.5B.6C.7D.88.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( c )A.9B.11C.15D.不确定9.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( e )A.250B.500C.254D.505 E.以上答案都不对10.对于有n 个结点的二叉树, 其高度为( d )A.nlog2nB.log2nC.⎣log2n⎦|+1D.不确定11.将含有83个结点的完全二叉树从根结点开始编号,根为1号,按从上到下.从左到右顺序结点编号,那么编号为41的双亲结点编号为()A.42B.40C.21D.2012.一个二叉树按顺序方式存储在一个维数组中,如图0 1 2 3 4 5 6 7 8 9 10 11 12 13 14A B C D E F G H I J则结点E在二叉树的第(c )层。
A. 1B. 2C. 3D.413.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是( b)的二叉树A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子14.任何一棵二叉树的叶结点在其先根.中根.后根遍历序列中的相对位置( c )A.肯定发生变化B.有时发生变化C.肯定不发生变化D.无法确定15.二叉树线索化后,仍不能有效求解的问题是(d )A.先序线索二叉树中求先序后继B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前驱D.后序线索二叉树中求后续后继一共有两种情况:一个是先序线索中求先序前驱和后序线索求后序后继16.如果T2是由有序树T转化而来的二叉树,那么T中结点的前序就是T2中结点的( a )A.前序B.中序C.后序D.层次序17.设森林T中有4棵树,第一.二.三.四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的右子树上有( d )个结点。
数据结构练习-2章(答案)精品
【关键字】活动、设计、情况、方法、条件、成就、空间、文件、模式、问题、系统、快速、沟通、执行、保持、特点、位置、关键、稳定、网络、需要、工程、方式、增量、结构、速度、关系、优先、解决、实现数据结构作业一、设n为整数,利用大“O”记号,求下列程序段的时间复杂度1、i=0;k=0;Do{ k=k*10*i; i++;} while (i<n);//2、i=1;{else}//3、x=n; //n>14、x=91;while (y>0)else// T(n)=二、选择题1 C )两大类。
A B.顺序结构、链式结构C D.初等结构、构造型结构2、以下数据结构中,哪一个是线性结构( D )?A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串3、在下面的程序段中,对x的赋值语句的频度为( C )for (i=1;i<=n;i++)for (j=1;j<=n;j++)x=x+1;A. O(2n) B.O(n) C.O(n2) D.O(log2n)4、下面关于线性表的叙述中,错误的是哪一个?( B )A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
5、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表6、静态链表中指针表示的是( B ).A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址7、下面的叙述不正确的是( B、C )A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关8、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。
数据结构第二章参考答案
数据结构第二章参考答案习题21. 填空题〔1〕在一个单链表中,每个结点包含data和next两个域,q所指结点是p 所指结点的直接前驱,假设在q和p之间插入s所指结点,那么执行〔___________〕和〔___________〕操作。
答案:q->next = s; s->next = p; 或 s->next=q->next; q->next = s; 〔2〕表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为〔___________〕,删除一个元素需要移动元素的平均个数为〔___________〕。
答案:n/2 (n-1)/2〔3〕表长为0的线性表称为〔___________〕。
答案:空表〔4〕动态内存管理是操作系统的根本功能之一,其作用是响应用户程序对内存的〔___________〕和〔___________〕请求。
答案:申请释放〔5〕顺序表多采用〔___________〕实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为〔___________〕。
而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为〔___________〕。
因此,假设线性表的操作主要是进行查找,很少进行插入或删除操作时,采用〔___________〕表比拟适宜。
答案:数组 O(1) O(n) 顺序〔6〕在链表某个位置上进行插入和删除操作,只需要修改〔___________〕即可,而无须移动大量元素,操作的时间复杂度为〔___________〕。
而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为〔___________〕,平均时间复杂度为〔___________〕。
因此,假设对线性表进行频繁的插入和删除操作时,采用〔___________〕表相对适宜。
假设插入和删除主要发生在表头和表尾,那么采用〔___________〕表更为适宜。
数据结构第2章习题参考答案
2.7 习题2.7.1知识点:线性表的逻辑结构一、选择题1①线性表L=(a1, a2,…,an),下列说法正确的是(D )。
A.每个元素都有一个直接前驱和一个直接后继。
B.线性表中至少要有一个元素。
C.表中诸元素的排列顺序必须是由小到大或由大到小。
D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。
2①在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D )。
A.插入B.删除C.排序D.定位3①线性表是具有n 个(C )的有限序列(n>0)。
【清华大学1998】A.表元素B.字符C.数据元素D.数据项E.信息项二、判断题(T )1①线性表中的每个结点最多只有一个前驱和一个后继。
( F )2①线性表中的每个结点都至少有一个前驱结点和后继结点。
( F )3①线性表是N个数的有限序列。
(F)4①同一线性表的数据元素可以具有不同的特性。
(T )5①线性表的长度n就是表中数据元素的个数,当n=0时,称为空表。
(T )6①线性表是一个相当灵活的数据结构,它的长度可根据需要增长或缩短。
( F )7①对线性表中的数据元素只能进行访问,不能进行插入和删除操作。
2.7.2知识点:线性表的顺序存储结构一、选择题1①在一个长度为n的顺序表中,在第i个元素(1 <= i <=n+1)之前插入一个新元素时需向后移动( B )个元素.A.n-1 B.n-i+1 C.n-i-1 D.i2①若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用(D )存储方式最节省时间。
A.单链表B.双链表C.单向循环D.顺序表3②一个数组第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(B )A.110 B.108 C.100 D.1204①下述哪一条是顺序存储结构的优点( A )。
【北方交通大学2001】A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示5③若长度为n 的线性表采用顺序存储结构,在其第i 个位置插入一个新元素的算法的时间复杂度为(C )(1<=i<=n+1)。
2022年智慧树数据结构(山东大学)单元测试答案
1数据结构的形式定义是(D, S),其中D是数据元素的有限集,S是D上的关系有限集。
(答案)对2在数据结构中,从层次上可以把数据结构分成(答案)逻辑结构和存储结构3线性表若采用链式存储结构时,要求内存中可用的存储单元的地址(答案)连续不连续都可以4下面程序的时间复杂度为(答案)O(m×n)5若需要利用形参直接访问实参,则应把形参变量说明为参数。
(答案)引用第二章测试1带头结点的单链表L为空的判定条件是(答案)L→next= =NULL2非空的循环单链表L的尾结点(由p所指向)满足(答案)p→next= =L3在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行。
(答案)p→next=s; s→next=q4在一个单链表中,若删除p所指结点的后继结点,则执行(答案)q=p→next; p→next=q→next5在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的算法的时间复杂度为(答案)O(n)1、一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是。
(答案)DCEAB2、在一个链队中,假设f和r分别为队首和队尾指针,则插入s所指结点的运算是。
(答案)r->next=s; r=s3、一个队列的入队序列是1,2,3,4,则队列的输出序列是。
(答案)1,2,3,44、一个中缀算术表达式为1+(3-x)*y,则其对应的后缀算术表达式为。
(答案)13x-y*+5、一个栈的入栈序列是A,B,C,D,E,f,出栈的序列是B,D,C,F,E,A,则栈的容量至少应()(答案)3第四章测试1如下图所示的4棵二叉树中,不是完全二叉树。
(答案)C2在线索化二叉树中,t所指结点没有左子树的充要条件是(答案)t->ltag= =13对一个满二叉树,m个树叶,n个结点,深度为h,则(答案)n=2h-14一个具有1025个结点二叉树的高h 为()(答案)11~10255一颗非空的二叉树的先序遍历序列和后序便利序列正好相反,则该二叉树满足()(答案)只有一个叶子结点第五章测试1(答案)22对于如下图所示的图,若从顶点a出发深度优先搜索遍历,得到的顶点序列为。
数据结构第2单元课后练习答案
某线性表中最常用的操作是在最后一个 元素之后插入一个元素和删除第一个元 素,则采用 存储方式最节省运算时间。
A. 单链表 B. 仅有头指针的单循环链表 C. 双向链表 D. 仅有尾指针的单循环链表
链表结构不具有下列
特点。
A. 插入和和删除元素无需移动元素 B. 可随机访问链表中的任意元素 C. 无需事先分配存储空间 D. 所需空间与结点个数成正比
O(n)
在类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; } }
在类LinearList 中增加一个成员函数,将顺序 表逆置,实现该函数并分析算法的时间复杂 度。不利用类SeqList 提供的操作直接实现。
template <class T> void SeqList<T>::Invert(){ T e; for (int i=0;i<length/2;i++){ e=elements[i]; elements[i]=elements[length-i-1]; elements[length-i-1]=e; } }
利用线性表类LinearList提供的操作,设计实 现两个集合的交和差运算。
#include <iostream.h> #include "seqlist0.h" #include "conio.h" template <class T> //集合交操作 void InterSection(SeqList<T> &LA,SeqList<T> &LB) { int m=LB.Length(); SeqList<T> LC(10); T x; for (int i=1;i<=m;i++) { LB.Find(i,x);//返回第i个元素到X中 if (LA.Search(x)) LC.Insert(LC.Length()+1,x); } cout<<LC; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构第二单元测验答案一、选择题1.由3 个结点可以构造出多少种不同的有向树( )A.2B.3C.4D.52.由3 个结点可以构造出多少种不同的二叉树( )A.2B.3C.4D.53.二叉树的第I层上最多含有结点数为( )A.2IB.2I-1-1C.2I-1D.2I -14.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2hB.2h-1C.2h+1D.h+1除第一层外,每层最少2个结点5.一棵树高为K的完全二叉树至少有( )个结点A.2k–1B.2k-1–1C.2k-1D.2k6.深度为6的二叉树最多有( )个结点A.64 B.63 C.32 D.317.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( )A.5B.6C.7D.88.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )A.9B.11C.15D.不确定9.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )A.250B.500C.254D.505 E.以上答案都不对10.对于有n 个结点的二叉树, 其高度为( )A.nlog2nB.log2nC.⎣log2n⎦|+1D.不确定11.将含有83个结点的完全二叉树从根结点开始编号,根为1号,按从上到下.从左到右顺序结点编号,那么编号为41的双亲结点编号为()A.42B.40C.21D.2012.一个二叉树按顺序方式存储在一个维数组中,如图0 1 2 3 4 5 6 7 8 9 10 11 12 13 14则结点E在二叉树的第()层。
A. 1B. 2C. 3D.413.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子14.任何一棵二叉树的叶结点在其先根.中根.后根遍历序列中的相对位置( )A.肯定发生变化B.有时发生变化C.肯定不发生变化D.无法确定15.二叉树线索化后,仍不能有效求解的问题是()A.先序线索二叉树中求先序后继B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前驱D.后序线索二叉树中求后续后继一共有两种情况:一个是先序线索中求先序前驱和后序线索求后序后继16.如果T2是由有序树T转化而来的二叉树,那么T中结点的前序就是T2中结点的( )A.前序B.中序C.后序D.层次序17.设森林T中有4棵树,第一.二.三.四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的右子树上有( )个结点。
A.n1-1B.n1C.n1+n2+n3D.n2+n3+n418.设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定B.2nC.2n+1D.2n-119.下面几个符号串编码集合中,不是前缀编码的是( )A.{0,10,110,1111}B.{11,10,001,101,0001}C.{00,010,0110,1000}D.{b,c,aa,ac,aba,abb,abc}20.一个n个顶点的连通无向图,其边的个数至少为()。
A.n-1 B.n C.n+1 D.nlogn21.n个结点的完全有向图含有边的数目是()。
A.n*n B.n(n+1) C.n/2 D.n*(n-l)22.下面关于图的存储的叙述中正确的是()。
A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关。
B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关。
C.用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关。
D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关23.在图的邻接表存储结构上执行深度优先搜索遍历类似于二叉树上的()A.先根遍历B.中根遍历C.后根遍历D.按层次遍历24.已知有向图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的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7 B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V4,V5,V2,V6,V7 D.V1,V2,V5,V3,V4,V6,V725.关键路径是事件结点网络中()。
A.从源点到汇点的最长路径B.从源点到汇点的最短路径C.最长回路 D.最短回路26.下面关于求关键路径的说法不正确的是()。
A.求关键路径是以拓扑排序为基础的B.一个事件的最早开始时间同以该事件为尾的弧的活动最早开始时间相同C.一个事件的最迟开始时间为以该事件为尾的弧的活动最迟开始时间与该活动的持续时间的差D.关键活动一定位于关键路径上二、填空题1.具有n个结点的满二叉树,其叶结点的个数是__(n+1)/2____。
2.完全二叉树中,结点个数为n,则编号最大的分支结点的编号为__⎣n/2⎦ ____。
3.一棵共有n个结点的树,其中所有分支结点的度均为k,则该树中的叶子结点个数为n-(n-1)/k。
4.含4个度为2的结点和5个叶子结点的二叉树,可有_0至多个___个度为1的结点。
5.8层完全二叉树至少有_ 128(第七层满,加第八层1个) _____个结点,拥有100个结点的完全二叉树的最大层数为__7__。
6.设一棵完全二叉树叶子结点数为k,最后一层结点数>2,则该二叉树的高度为__ ⎡log2k⎤+1 ____。
7.对一棵完全二叉树,设一个结点的编号为i,若它的左孩子结点存在,则其编号为2i;若右孩子结点存在,则其编号为2i+1;而双亲结点的编号为⎣ i/2 ⎦。
8.具有N个结点的二叉树,采用二叉链表存储,共有_ N+1 _____个空链域。
9.在二叉树中,指针p所指结点为叶子结点的条件是_p->lchild==NULL && p->rchlid==NULL _____。
10.若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,则它必是该子树的__前序____序列中的最后一个结点。
11.在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要_n___条弧。
12.如果含n个顶点的图形形成一个环,则它有___ n____棵生成树。
13.为了实现图的广度优先搜索,除了一个标志数组标志已访问的图的结点外,还需__队列__存放被访问的结点以实现遍历。
14.求图的最小生成树有两种算法,__克鲁斯卡尔____算法适合于求稀疏图的最小生成树。
三、判断题1.树与二叉树是两种不同的树型结构。
√2.度为二的树就是二叉树。
×3.在二叉树的第i层上至少有2i-1个结点(i>=1)。
×4.完全二叉树一定存在度为1的结点。
×5.若一棵二叉树的任一非叶子结点的度为2,则该二叉树为满二叉树( X )6.一个树的叶结点,在前序遍历和后序遍历下,皆以相同的相对位置出现。
√7.若某二叉树的叶子结点数为1,则其先序序列和后序序列一定相反( √ )8.二叉树的前序遍历并不能唯一确定这棵树,但是如果我们还知道该树的根结点是那一个,则可以确定这棵二叉树。
×9.已知一棵树的先序序列和后序序列,一定能构造出该树( √ )10.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
√11.有向图中顶点V的度等于其邻接矩阵中第V行中的1的个数。
×12.一个有向图的邻接表和逆邻接表中结点的个数可能不等。
×13.在无向图的深度优先遍历算法中,DFS(从某个顶点出发深度优先遍历图的算法)被调用了几次就说明该图有几个联通分量。
(√)14.需要借助于一个队列来实现DFS算法(深度优先遍历)。
×15.广度遍历生成树描述了从起点到各顶点的最短路径。
×16.既使有向无环图的拓扑序列唯一,也不能唯一确定该图。
×17.在AOE图中,关键路径上某个活动的时间缩短,整个工程的时间也就必定缩短。
×四、解答题1.已知一棵二叉树的前序遍历的结果是ABKCDFGHIJ, 中序遍历的结果是KBCDAFHIGJ, 试画出这棵二叉树。
当前序序列为ABKCDFGHIJ,中序序列为KBCDAFHIGJ时,逐步形成二叉树的过程如下图所示:2.对于给定的5个实数W={8,5,13,2,6},试构造哈夫曼树;并求出每个叶子结点的哈夫曼编码。
8 5 2 6 13 7 5 2 13 6 7 52 8 13 21 34136 7 52 8 13 21每个叶子的哈夫曼编码为:权值为8的哈夫曼编码:10权值为5的哈夫曼编码:011权值为13的哈夫曼编码:11权值为2的哈夫曼编码:010权值为6的哈夫曼编码:00注意:哈夫曼树及编码不唯一3.对带权无向图(如图1所示)采用prim 算法从顶点①开始构造最小生成树。
(写出加入生成树顶点集合S 和选择边Edge 的顺序)S : 顶点号Edge : (顶点,顶点,权值) ①( 1, 2,9 ) ①②( 2, 4,5 ) ①②④③( 2, 3,7 ) ①②④③( 3, 5,6 ) ①②④③⑤( 3, 6,7 ) ①②④③⑤⑥四、算法设计题1.编写算法实现二叉树的层次遍历顺序(同一层次从左至右)算法。
void LayerOrder(Bitree T) {//层序遍历二叉树InitQueue(Q); //建立工作队列…….(1分) if(T)EnQueue(Q,T); …….(1分) while(!QueueEmpty(Q)) {DeQueue(Q,p); …….(4分)visit(p);if(p->lchild) EnQueue(Q,p->lchild); …….(2分) if(p->rchild) EnQueue(Q,p->rchild); …….(2分) }}//LayerOrder2. 试写出一递归函数,复制一棵二叉树。
BiTree Copy(BiTree t)//复制二叉树t{BiTree bt;if (t==null) bt=null;else{bt=(BiTree)malloc(sizeof(BiNode)); bt->data=t->data; bt->lchild=Copy(t->lchild);bt->rchild=Copy(t->rchild);}return(bt); }//结束Copy。