数据结构试卷期末试卷(2007年06级C)(信息)
《数据结构》期末考试试题及答案
《数据结构》期末考试试题及答案一、单项选择题1. 数据结构是计算机科学的基础学科之一。
下列哪个选项正确描述了数据结构的定义?A. 数据结构是一种计算机程序B. 数据结构是一种存储和组织数据的方法C. 数据结构是一种人工智能技术D. 数据结构是一种操作系统答案:B2. 链表和数组是常见的数据结构,它们之间的主要区别是:A. 数组可以存储不同类型的数据,而链表只能存储相同类型的数据B. 数组的元素在内存中是连续存储的,而链表的元素在内存中是分散存储的C. 链表可以随机访问元素,而数组只能顺序访问元素D. 链表的插入和删除操作更高效,而数组的访问操作更高效答案:B3. 在二叉树中,每个节点最多可以有多少个子节点?A. 1B. 2C. 3D. 无限多个答案:B二、填空题1. 假设有一组数据 [5, 8, 3, 2, 9],按照从小到大的顺序进行冒泡排序的过程中,经过三次交换后的结果是__2__,__3__,__5__,__8__,__9__。
2. 请完成以下代码,实现栈的入栈和出栈操作:```pythonclass Stack:def __init__(self):self.stack = []def push(self, item):self.stack.append(item)def pop(self):if not self.is_empty():return self.stack.pop()def is_empty(self):# 示例代码s = Stack()s.push(1)s.push(2)s.push(3)print(s.pop()) # 输出 3print(s.pop()) # 输出 2print(s.is_empty()) # 输出 False ```答案:```pythonclass Stack:def __init__(self):self.stack = []def push(self, item):self.stack.append(item)def pop(self):if not self.is_empty():def is_empty(self):return len(self.stack) == 0# 示例代码s = Stack()s.push(1)s.push(2)s.push(3)print(s.pop()) # 输出 3print(s.pop()) # 输出 2print(s.is_empty()) # 输出 False```三、简答题1. 请简要介绍树的基本概念及常见的树结构。
《数据结构》期末考试试卷试题及答案
《数据结构》期末考试试卷试题及答案第一部分:选择题(每题2分,共20分)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. 堆7. 下面哪个数据结构用于实现最小树算法?A. 栈B. 队列C. 散列表D. 堆8. 下面哪个数据结构用于实现拓扑排序算法?A. 栈B. 队列C. 散列表D. 堆9. 下面哪个数据结构用于实现最短路径算法?A. 栈B. 队列C. 散列表D. 堆10. 下面哪个数据结构用于实现并查集算法?A. 栈B. 队列C. 散列表D. 堆第二部分:填空题(每题2分,共20分)1. 链表是一种______数据结构。
2. 二叉树的节点最多有______个子节点。
3. 堆是一种特殊的______。
4. 散列表的查找效率取决于______。
5. 图的遍历算法包括______和______。
6. 快速排序算法的平均时间复杂度为______。
7. 哈希表中的冲突解决方法有______和______。
8. 最小树算法包括______和______。
9. 最短路径算法包括______和______。
10. 并查集算法用于解决______问题。
第三部分:简答题(每题10分,共50分)1. 请简述栈和队列的区别。
2. 请简述二叉搜索树的特点。
3. 请简述哈希表的原理。
4. 请简述图的深度优先搜索算法。
5. 请简述最小树算法的原理。
第四部分:编程题(每题20分,共50分)1. 编写一个函数,实现链表的插入操作。
2007《数据结构》期末试卷_A_答案
一、(本题10分)(1)简述线性表的两种存储结构的主要优缺点及各自适用的场合。
(2)在折半查找和表插入排序中,记录分别应使用哪种存储结构,并用一句话简述理由。
答:(1)顺序存储是按索引(如数组下标)来存取数据元素,优点是可以实现快速的随机存取,缺点是插入与删除操作将引起元素移动,降低效率。
对于链式存储,元素存储采取动态分配,利用率高。
缺点是须增设指针域,存储数据元素不如顺序存储方便。
优点是插入与删除操作简单,只须修改指针域。
(2)在折半查找中,记录使用顺序存储,可以快速实现中点的定位;在表插入排序中,记录使用静态链表,可以降少移动记录的操作。
二、(本题15分)在带头结点的非空线性链表中,试设计一算法,将链表中数据域值最小的那个结点移到链表的最前面,其余各结点的顺序保持不变。
要求:不得额外申请新的链结点。
解:程序如下:typedef struct node {int data;struct node * next;}Node,*LinkList;void MinFirst(LinkList L){Node *p,*q,*ptrmin;if(L->next == NULL) return; //空表ptrmin = L; //ptrmin指向当前最小结点的前一个结点p = L->next;//p指向当前结点的前一个结点while(p->next!=NULL) {if( p->next->data < ptrmin->next->data ) ptrmin = p;p = p->next;}//q指向最小结点,并从链表中删除q = ptrmin->next; ptrmin->next = q->next;q->next = L->next; L->next = q; //q指向的最小结点插入到链表头}三、(本题15分)编写函数判断一棵二叉树是否不含有度为1的结点,若任何结点的度都不为1,则返回TRUE,否则返回FALSE。
数据结构期末考试试题(含答案)
数据结构期末考试试题(含答案)C.{100,98,85,77,80,60,82,40,20,10,66} 答:C。
10.在哈夫曼编码中,若有n个字符,其权值分别为w1,w2,…,wn,编码长度分别为l1,l2,…,ln,则哈夫曼编码的平均长度为a。
A.∑(wi/2li)B.∑(wi/li)C.∑(wi/2li-1)D.∑(wi/li-1)答:A。
2005-2006学年第二学期“数据结构”考试试题(A)要求:所有的题目的解答均写在答题纸上。
每张答题纸上需写清楚姓名、班号和学号,并在上面写上题目的序号。
一、单项选择题(每小题2分,共20分)1.数据的运算效率与采用何种存储结构有关。
因此,选项A是正确答案。
2.链表不具备的特点是可随机访问任一结点。
参见本节要点3.因此,选项A是正确答案。
3.在顺序表中删除一个元素的时间复杂度为O(n)。
因此,选项C是正确答案。
4.具有随机存取功能的线性表存储结构是顺序表。
因此,选项D是正确答案。
5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是dceab。
因此,选项C是正确答案。
6.循环队列qu的队空条件是qu.rear==qu.front。
因此,选项D是正确答案。
7.两个串相等必有串长度相等且串中各位置字符均对应相等。
因此,选项B是正确答案。
8.用直接插入排序对下面四个序列进行递增排序,元素比较次数最少的是21,32,46,40,80,69,90,94.因此,选项C是正确答案。
9.以下序列不是堆(大根或小根)的是{100,98,85,77,80,60,82,40,20,10,66}。
因此,选项C是正确答案。
10.在哈夫曼编码中,若有n个字符,其权值分别为w1,w2,…,wn,编码长度分别为l1,l2,…,ln,则哈夫曼编码的平均长度为∑(wi/2li)。
因此,选项A是正确答案。
C。
{10.20.40.60.66.77.80.82.85.98.100}D。
《数据结构》期末考题(doc 8页)
《数据结构》期末考题(doc 8页)西南财经大学2007 - 2008 学年第二学期统计专业本科 2007、2006级(二、三年级上学期)学号评定成绩(分)学生姓名担任教师周启海《数据结构》期末考试题(B卷)(下述一—三题全作计100分,两小时完卷)考试日期:2008. 12 . 24试题全文:遵守考场纪律,防止一念之差贻误终生。
一、判断题(每小题5分,共10分)1. “广义表”,难用顺序存储结构来描述。
答:2. 已知排序所采用的数据结构、算法思想、语言环境等均相同。
如果对同一组待排序数据,则其递增序排序算法与递减排序算法的运行时间通常不同。
答:二、简答题(每小题5分,共60分)1. 有人说:“学习《数据结构》课程的关键,可概括为——什么是‘数据结构’?有哪些‘数据结构’?各种‘数据结构’特点如何?(所论问题)该用何种‘数据结构’?”这种说法错吗?为什么?答:5. “二叉树”的存储结构,虽然既可采用顺序存储结构(例如数组),也可采用非顺序存储(例如链表)。
但为什么说“非完全二叉树,不宜采用顺序存储结构”?答:6. 设计××××航空公司××航班的“飞机乘客票务管理程序”时,最适宜采用的数据结构是什么?为什么?答:7.现有实现同一功能的三个算法A1,A2和A3,且已知其时间复杂度顺次为Tl=O(2n),T2=O(n2),T3=O(n log n)。
请仅就其时间复杂度,给出各算法优化程度递增的顺序,并说明理由。
答:8. 已知有 5 个元素的入栈次序为“A,B,C,D,E”。
现要求第一个出栈元素为C、第二个出栈元素为D,而其余栈元素仍须保留在此栈中。
请说明相关栈及其元素的弹出与压入操作处理过程。
答:9. 已知二叉树含三个结点A、B、C,请给出以B为根结点的二叉树所有形态。
答:10. 设二维数组A[10][8]的每个数组元素占四个存储单位,且第一个元素A[1][1]的存储地址为1000。
数据结构期末考试题及答案
数据结构期末考试题及答案一、选择题(每题2分,共20分)1. 在数据结构中,线性表的顺序存储结构通常使用什么数据结构来实现?A. 链表B. 数组C. 栈D. 队列答案:B2. 以下哪个是二叉树的性质?A. 每个节点最多有两个孩子B. 每个节点最多有三个孩子C. 每个节点最多有四个孩子D. 每个节点最多有五个孩子答案:A3. 在图的遍历算法中,深度优先搜索(DFS)和广度优先搜索(BFS)的区别是什么?A. DFS使用队列,BFS使用栈B. DFS使用栈,BFS使用队列C. DFS和BFS都使用栈D. DFS和BFS都使用队列答案:B...20. 以下哪个排序算法的时间复杂度为O(n^2)?A. 冒泡排序B. 选择排序C. 插入排序D. 所有上述排序算法答案:D二、简答题(每题10分,共30分)1. 简述链表和数组的区别。
答案:链表和数组都是用来存储数据的线性数据结构。
数组是连续的内存空间,可以随机访问,但插入和删除操作效率较低;链表由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针,不支持随机访问,但插入和删除操作较为高效。
2. 什么是递归?请给出一个递归算法的例子。
答案:递归是一种算法设计技术,它允许函数调用自身来解决问题。
递归通常包含基本情况和递归情况。
例如,计算阶乘的递归算法:f(n) = n * f(n-1),其中基本情况是f(1) = 1。
...三、算法设计题(每题25分,共50分)1. 给定一个整数数组,请设计一个算法找出数组中的第k大元素。
答案:可以采用快速选择算法,类似于快速排序的划分过程,通过随机选择一个元素作为基准,将数组分为两部分,一部分包含比基准大的元素,另一部分包含比基准小的元素。
然后根据k与基准元素的位置关系,决定是继续在左侧子数组还是右侧子数组中进行查找。
2. 描述如何使用哈希表解决字符串匹配问题。
答案:哈希表可以用于实现字符串匹配的KMP算法。
首先,构建模式字符串的前缀函数,该函数用于记录模式字符串中每个位置的最长相同前缀和后缀的长度。
数据结构期末考试题及答案
数据结构期末考试题及答案一、选择题(每题2分,共10题)1. 数据结构是指()A. 存储和组织数据的方式B. 对数据进行计算和处理的方法C. 数据的物理表示形式D. 数据的逻辑结构答案:A. 存储和组织数据的方式2. 在数据结构中,栈是一种()A. 先进先出的数据结构B. 后进先出的数据结构C. 随机存取的数据结构D. 按键值查找的数据结构答案:B. 后进先出的数据结构3. 下列哪种数据结构不支持随机访问?()A. 队列B. 栈C. 数组D. 链表答案:D. 链表4. 在二叉树中,每个节点最多可以有几个子节点?()A. 0B. 1C. 2D. 无限多答案:C. 25. 在图的表示方法中,邻接矩阵适用于()A. 稠密图B. 稀疏图C. 有向图D. 无向图答案:A. 稠密图6. 下列排序算法中,最坏情况时间复杂度为O(nlogn)的是()A. 冒泡排序B. 插入排序C. 快速排序D. 选择排序答案:C. 快速排序7. 广度优先搜索算法用于()A. 求最短路径B. 求全排列C. 求最小生成树D. 求图的连通分量答案:A. 求最短路径8. 哈希表的查找时间复杂度为()A. O(1)B. O(n)C. O(logn)D. O(n^2)答案:A. O(1)9. AVL树是一种()A. 无序树B. 有序树C. 平衡树D. 非平衡树答案:C. 平衡树10. 以下哪个不属于基本的查找算法?()A. 二分查找B. 插值查找C. 散列查找D. 顺序查找答案:C. 散列查找二、填空题(每题4分,共4题)11. 下列不是线性表的是()答案:二叉树12. 在冒泡排序中,每一轮的比较次数是________答案:n-113. 在堆排序中,堆的建立时间复杂度为________答案:O(n)14. 从一个顶点到其余各顶点的最短路径算法是________答案:Dijkstra算法三、简答题(每题10分,共3题)15. 请简要说明栈的应用场景,并给出一个具体实例。
数据结构期末考试试题及答案
数据结构期末考试试题及答案一、选择题1. 在数据结构中,以下哪种数据结构是“先进先出”(FIFO)的?A. 栈B. 队列C. 链表D. 堆答案:B2. 哪种数据结构具有类似现实生活中“洋葱”的结构?A. 链表B. 树C. 图D. 堆答案:B3. 在常见的排序算法中,以下哪个算法具有最好的时间复杂度?A. 快速排序B. 插入排序C. 冒泡排序D. 选择排序答案:A4. 以下哪个数据结构可以解决“最短路径”问题?A. 队列B. 链表C. 树D. 图答案:D5. 在二叉搜索树中,节点的左子树的值都小于节点的值,右子树的值都大于节点的值。
这种特点被称为:A. 平衡性B. 完全性C. 左倾性D. 有序性答案:D二、填空题1. 在栈的操作中,插入元素的操作被称为______。
答案:push2. 哈希表通过______的方式快速查找元素。
答案:散列3. 在链表中,指向链表头部的指针被称为______。
答案:头指针4. 在图的遍历算法中,使用队列的遍历方式被称为______。
答案:广度优先搜索5. 大O表示法中,表示最坏情况下时间复杂度的记号是______。
答案:O三、简答题1. 请简要说明栈和队列的特点及应用场景。
答:栈是一种先进后出(FILO)的数据结构,只能在栈顶进行插入和删除操作。
栈的应用场景包括函数调用、表达式求值、撤销操作等。
队列是一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。
队列的应用场景包括多线程任务调度、消息队列等。
2. 简要描述堆排序的思想和步骤。
答:堆排序是一种基于二叉堆的排序算法。
首先,将待排序序列构建成一个大顶堆;然后,将堆顶元素与最后一个元素交换,即将最大元素放到已排序部分的末尾;接着,重新调整堆,将剩余元素重新构建成大顶堆;重复以上步骤,直到所有元素排序完成。
四、编程题请使用C语言实现一个二叉树的前序遍历算法。
```c#include <stdio.h>#include <stdlib.h>struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;};void preorderTraversal(struct TreeNode* root) {if (root != NULL) {printf("%d ", root->val); // 先访问根节点preorderTraversal(root->left); // 再遍历左子树preorderTraversal(root->right); // 最后遍历右子树}}int main() {// 构建二叉树struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));struct TreeNode* node1 = (struct TreeNode*)malloc(sizeof(struct TreeNode));struct TreeNode* node2 = (struct TreeNode*)malloc(sizeof(struct TreeNode));root->val = 1;node1->val = 2;node2->val = 3;root->left = node1;root->right = node2;node1->left = NULL;node1->right = NULL;node2->left = NULL;node2->right = NULL;// 调用前序遍历函数preorderTraversal(root);return 0;}```本文介绍了数据结构期末考试的试题及答案,涵盖了选择题、填空题、简答题和编程题等不同题型。
数据结构期末考试试题及答案
数据结构期末考试试题及答案数据结构期末考试试题及答案随着信息时代的到来,数据的处理和管理变得愈发重要。
数据结构作为计算机科学的基础课程之一,对于培养学生的编程思维和解决问题的能力具有重要意义。
数据结构期末考试是对学生掌握该课程知识的一次全面检验。
本文将为大家提供一些常见的数据结构期末考试试题及答案,希望能够对大家复习备考有所帮助。
1. 请解释什么是数据结构,并举例说明。
数据结构是指在计算机中组织和存储数据的方式。
它关注的是数据的逻辑关系和操作,而不仅仅是数据本身。
常见的数据结构有数组、链表、栈、队列、树等。
举例来说,数组是一种线性结构,它将相同类型的数据元素按照一定的顺序存储在一块连续的内存空间中,可以通过索引来访问和修改元素。
2. 请说明数组和链表的区别,并分别列举它们的优缺点。
数组和链表都是常见的线性数据结构,但它们在存储方式和操作上有所不同。
数组将元素存储在连续的内存空间中,通过索引可以直接访问和修改元素。
链表则通过节点和指针的方式将元素串联起来,每个节点包含数据和指向下一个节点的指针。
数组的优点是访问速度快,可以通过索引直接定位元素,适合随机访问。
缺点是插入和删除操作比较耗时,需要移动其他元素。
链表的优点是插入和删除操作简单高效,只需要修改指针即可,不需要移动其他元素。
缺点是访问速度较慢,需要遍历链表才能找到指定位置的元素。
3. 请解释什么是栈和队列,并分别列举它们的应用场景。
栈和队列都是常见的线性数据结构,它们在数据的插入和删除操作上有所不同。
栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
队列是一种先进先出(FIFO)的数据结构,允许在队尾进行插入操作,在队头进行删除操作。
栈的应用场景有很多,比如函数调用栈、表达式求值、括号匹配等。
函数调用栈用于保存函数的局部变量和返回地址,保证函数的正确执行顺序。
表达式求值中,栈可以用于保存运算符和中间结果,实现正确的计算顺序。
(完整word版)数据结构C语言版期末考试试题(附带复习资料)
“数据结构”期末考试试题一、单选题(每小题2分,共12分)1 .在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行()。
A . HL = ps p 一>next = HLB . p 一>next = HL; HL= p3C . p 一>next = Hl; p= HL;D . p —>n ext = HL—>n ext;HL —>n ext = p;2 . n个顶点的强连通图中至少含有()。
A.n —I条有向边B.n 条有向边C. n(n —1) / 2条有向边D. n(n —1)条有向边3. 从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为()。
A. 0(1)B.0( n)C.0(10gz n)D.0( n2)4. 由权值分别为3, 8, 6, 2, 5的叶子结点生成一棵哈夫曼树,它的带权路径长度为()。
A . 24B . 48C. 72 D . 535. 当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为()参数,以节省参数值的传输时间和存储参数的空间。
A.整形B.引用型C.指针型D.常值引用型•6. 向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为()。
A . 0(n)B . 0(1)C . 0(n2)D . 0(10g2 n)二、填空题(每空1分,共28分)1 .数据的存储结构被分为--- 、 --- 、 --- 和--- 四种。
2 .在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为一一域和——域。
3. ——中缀表达式3十x*(2.4 /5—6)所对应的后缀表达式为----------- 。
4 .在一棵高度为h的3叉树中,最多含有一一结点。
5 .假定一棵二叉树的结点数为18,则它的最小深度为一一,最大深度为-------6 .在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定一一该结点的值。
数据结构c语言期末考试试题及答案
数据结构c语言期末考试试题及答案一、选择题(每题2分,共20分)1. 在C语言中,以下哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A2. 在C语言中,以下哪个函数用于创建链表节点?A. mallocB. callocC. reallocD. free答案:A3. 如果一个链表的头指针为NULL,这意味着什么?A. 链表为空A. 链表已满C. 链表正在使用中D. 链表已损坏答案:A4. 在C语言中,以下哪个数据结构允许快速随机访问?A. 链表B. 数组C. 栈D. 队列5. 在二叉树中,以下哪个术语描述了没有子节点的节点?A. 根节点B. 叶节点C. 内部节点D. 父节点答案:B6. 以下哪个算法用于在二叉搜索树中查找一个元素?A. 深度优先搜索B. 广度优先搜索C. 插入排序D. 二分查找答案:D7. 在C语言中,以下哪个关键字用于定义一个函数?A. intB. voidC. returnD. struct答案:A8. 以下哪个选项是正确的递归函数定义?A. int fact(int n) { if (n > 1) return n * fact(n-1); else return 1; }B. int fact(int n) { if (n > 1) return n * fact(n); else return 1; }C. int fact(int n) { if (n > 1) return n * fact(n+1); else return 1; }D. int fact(int n) { if (n > 1) return n; else return 1; }9. 在C语言中,以下哪个函数用于释放动态分配的内存?A. mallocB. callocC. reallocD. free答案:D10. 在C语言中,以下哪个关键字用于定义一个指针?A. intB. charC. *D. &答案:C二、填空题(每题2分,共20分)1. 在C语言中,结构体的成员可以通过其结构体变量名和______访问。
数据结构期末考试试题及答案
数据结构期末考试试题及答案一、选择题1. 以下哪种数据结构是线性存储结构?A. 树B. 图C. 链表D. 哈希表答案:C2. 在二叉搜索树中,若删除一个节点,则需要进行以下哪些操作?A. 仅删除操作B. 删除操作和调整树结构操作C. 插入操作D. 忽略操作答案:B3. 快速排序算法的时间复杂度在最坏情况下是:A. O(log n)B. O(n)C. O(n log n)D. O(n^2)答案:D4. 下面哪个排序算法适用于大数据量的排序?A. 冒泡排序B. 快速排序C. 插入排序D. 归并排序答案:D5. 哈夫曼树是一种特殊的:A. 二叉树B. 多叉树C. 哈希表D. 图答案:A二、填空题1. 链表的基本操作包括__________、__________、__________和__________。
答案:创建、插入、删除、查找2. 栈是一种后进先出(LIFO)的数据结构,其添加元素的操作称为__________,移除元素的操作称为__________。
答案:push、pop3. 在图的遍历算法中,按照遍历方向的不同,可以分为__________和__________。
答案:深度优先遍历、广度优先遍历4. 红黑树是一种自平衡的__________。
答案:二叉搜索树4. 散列表(哈希表)的主要优点是__________。
答案:查找速度快三、简答题1. 请简述数组和链表的区别及各自的优缺点。
答案:数组是一种顺序存储结构,通过索引直接访问元素,访问速度快,但是插入和删除操作需要移动大量元素,效率较低。
链表是一种非顺序存储结构,通过指针连接元素,插入和删除操作只需要改变指针,效率较高,但是访问元素需要从头开始遍历,速度较慢。
2. 请解释二分查找法的工作原理及其适用条件。
答案:二分查找法是一种在有序数组中查找特定元素的算法。
工作原理是将数组分为两部分,判断目标值与中间元素的大小关系,然后在相应的一半中继续查找,重复此过程,直到找到目标值或范围缩小到无法再分。
数据结构期末考试试题(含答案)
数据结构期末考试试题(含答案)数据结构期末考试试题(含答案)第一题:多项式相加(20分)将两个多项式 P(x) 和 Q(x) 相加,结果存储在另一个多项式 S(x) 中,请写出相应的算法,并给出其时间复杂度分析。
答案:算法如下:1. 初始化一个空多项式 S(x)。
2. 分别取多项式 P(x) 和 Q(x) 的第一项,判断指数的大小关系,并将指数较小的项加入 S(x)。
3. 若指数相同,则将两项系数相加,并将结果加入 S(x)。
4. 重复步骤2和步骤3,直到两个多项式中的所有项都被处理完。
5. 返回结果多项式 S(x)。
时间复杂度分析:- 假设 P(x) 和 Q(x) 的项数分别为 m 和 n。
- 在最坏情况下,需要比较 m+n 次指数大小,并进行 m+n-1 次系数相加。
- 因此,该算法的时间复杂度为 O(m+n)。
第二题:循环队列设计(30分)请设计一个循环队列,实现入队、出队等基本操作,并给出时间复杂度分析。
答案:定义循环队列的结构体如下:```ctypedef struct {int *data; // 存储队列元素的数组int front; // 队首指针,指向队首元素的位置int rear; // 队尾指针,指向队尾的下一个位置int maxSize; // 队列的最大容量} CircularQueue;```基本操作的实现如下:1. 初始化循环队列:```cvoid initQueue(CircularQueue *queue, int maxSize) {queue->data = (int *)malloc(sizeof(int) * maxSize);queue->front = queue->rear = 0;queue->maxSize = maxSize;}```2. 入队操作:```cint enqueue(CircularQueue *queue, int value) {if ((queue->rear + 1) % queue->maxSize == queue->front) { return 0; // 队列已满,插入失败}queue->data[queue->rear] = value;queue->rear = (queue->rear + 1) % queue->maxSize;return 1; // 插入成功}```3. 出队操作:```cint dequeue(CircularQueue *queue, int *value) {if (queue->front == queue->rear) {return 0; // 队列为空,出队失败}*value = queue->data[queue->front];queue->front = (queue->front + 1) % queue->maxSize; return 1; // 出队成功}```时间复杂度分析:- 入队和出队操作的时间复杂度均为 O(1)。
数据结构期末考试试卷
数据结构期末考试试卷一、选择题(每题2分,共20分)1. 在数据结构中,通常使用______来表示数据元素之间的关系。
A. 指针B. 函数C. 数组D. 链表2. 以下关于栈的描述,错误的是:A. 栈是一种后进先出(LIFO)的数据结构B. 栈的插入和删除操作都只能从栈顶进行C. 栈的实现可以使用数组或链表D. 栈的容量是无限的3. 以下数据结构中,时间复杂度为O(1)的查找操作是:A. 链表B. 顺序表C. 哈希表D. 二叉搜索树4. 以下哪种排序算法的时间复杂度是O(n^2):A. 快速排序B. 归并排序C. 选择排序D. 堆排序5. 以下关于图的描述,错误的是:A. 图由顶点和边组成B. 图可以是有向的,也可以是无向的C. 图中的边可以是单向的,也可以是双向的D. 图中不能存在环6. 以下算法中,不是基于比较的排序算法是:A. 冒泡排序B. 插入排序C. 计数排序D. 选择排序7. 以下关于树的遍历算法,说法正确的是:A. 先序遍历是先访问根节点,然后遍历左子树,最后遍历右子树B. 中序遍历是先遍历左子树,然后访问根节点,最后遍历右子树C. 后序遍历是先遍历左子树,然后遍历右子树,最后访问根节点D. 所有选项都是正确的8. 以下数据结构中,可以用于实现索引的是:A. 数组B. 链表C. 栈D. 队列9. 以下算法中,空间复杂度为O(1)的是:A. 快速排序B. 归并排序C. 选择排序D. 插入排序10. 在二叉树中,以下说法正确的是:A. 每个节点最多有两个子节点B. 每个节点最多有一个子节点C. 每个节点的子节点数没有限制D. 每个节点至少有两个子节点二、简答题(每题5分,共10分)1. 简述链表与数组在存储结构上的区别。
2. 描述二叉搜索树的查找过程。
三、算法设计题(每题15分,共30分)1. 请设计一个算法,实现单链表的反转。
2. 请设计一个算法,实现二叉树的前序遍历。
四、综合应用题(每题20分,共30分)1. 假设有一个字符串数组,请设计一个算法,将数组中的字符串按照字典序排序,并输出排序后的结果。
数据结构试卷及答案
数据结构试卷及答案《数据结构》期末考试一、单项选择题(请将正确答案的字母填写在每题对应的括号内,每小题1分,共20分)1、下面关于串的叙述中,哪一个是不正确的?()A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2、设无向图的顶点个数为n,则该图最多有()条边。
A.n-1 B.n(n-1)/2 C.n(n+1)/2 D.03、以下数据结构中,()是非线性数据结构。
A.树B.字符串C.队列D.栈4、下面关于线性表的叙述中,错误的是哪一个?()A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
5、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front 和rear,则当前队列中的元素个数为()。
A.(rear-front+m)%m B.rear-front+1C.(front-rear+m)%m D.(rear-front)%m6、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。
A.p->next=s; s->next=p->next; B.s->next=p->next; p->next=s;C.p->next=s; p->next=s->next; D.p->next=s->next; p->next=s;7、设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。
A.1,2,4,3 B.2,1,3,4 C.1,4,3,2 D.4,3,1,2,8、广义表(a,(b,c),d,e)的表头和表尾分别为()。
A.a和(b,c),d,e B.(a)和(b,c),d,eC.a 和((b,c),d,e) D.(a) 和((b,c),d,e)二、判断题,在正确的题后括号内打“√”,在错误的题后括号内打“×”(每小题1分,共10分)9、栈和队都是()A.顺序存储的线性结构B.链式存储的非线性结构C.限制存取点的线性结构D.限制存取点的非线性结构10、从逻辑上可以把数据结构分为()两大类。
数据结构期末考试试题及答案
数据结构期末考试试题及答案一、选择题(每题2分,共20分)1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一的关系B. 元素之间存在一对多的关系C. 元素之间存在多对多的关系D. 元素之间存在一对一或多对多的关系2. 栈(Stack)是一种特殊的线性表,其特点是:A. 允许在表的任一位置进行插入和删除操作B. 只能在表的首端进行插入和删除操作C. 只能在表的末端进行插入和删除操作D. 插入和删除操作没有特定的限制3. 以下哪个算法是排序算法?A. 快速排序B. 深度优先搜索C. 广度优先搜索D. 二分查找4. 哈希表解决冲突的常用方法不包括:A. 开放寻址法B. 链地址法C. 二分查找法D. 再散列法5. 在图的遍历算法中,深度优先搜索(DFS)使用的是:A. 栈B. 队列C. 链表D. 树...(此处省略其他选择题)二、简答题(每题10分,共30分)1. 请简述二叉树的三种遍历方法及其特点。
2. 什么是平衡二叉树?请说明它与普通二叉树的区别。
3. 解释什么是图的邻接矩阵表示法和邻接表表示法,并比较它们的优缺点。
三、计算题(每题15分,共30分)1. 给定一个数组A[1...n],请写出一个时间复杂度为O(n)的算法,找出数组中的最大值和最小值。
2. 假设有一个链表,链表中的节点按照值递增的顺序排列,请设计一个算法删除链表中所有重复的节点。
四、编程题(每题20分,共20分)1. 编写一个函数,实现二叉搜索树的插入操作,并保证树的平衡。
数据结构期末考试答案一、选择题1. C2. B3. A4. C5. A...(此处省略其他选择题答案)二、简答题1. 二叉树的三种遍历方法包括前序遍历、中序遍历和后序遍历。
前序遍历首先访问根节点,然后递归遍历左子树,最后递归遍历右子树。
中序遍历首先递归遍历左子树,然后访问根节点,最后递归遍历右子树。
后序遍历首先递归遍历左子树,然后递归遍历右子树,最后访问根节点。
数据结构期末测试题及答案
数据结构期末测试题及答案一、选择题(每题2分,共40分)1. 数据结构是指()。
A. 存储数据的方式和方法B. 描述数据和操作数据的方式和方法C. 组织数据和操作数据的方式和方法D. 分析数据和操作数据的方式和方法答案:C2. 在数据结构中,数组是()。
A. 存储在连续内存空间中的元素集合B. 存储在非连续内存空间中的元素集合C. 存储在链表中的元素集合D. 存储在哈希表中的元素集合答案:A3. 下列哪种数据结构的查找操作时间复杂度一定是O(1)?A. 数组B. 链表C. 栈D. 哈希表答案:D4. 假设有一个长度为n的有序数组,采用二分法查找元素的时间复杂度是()。
A. O(1)B. O(log n)C. O(n)D. O(n log n)答案:B5. 在数据结构中,栈是一种()。
A. 先进先出的数据结构B. 后进先出的数据结构C. 可以在任意位置插入和删除元素的数据结构D. 可以动态扩展和缩小的数据结构答案:B二、填空题(每题5分,共40分)1. 链表是一种()数据结构。
答案:线性2. 在二叉树中,一个节点的子节点个数最多为()。
答案:23. 在图的表示中,邻接矩阵法中用1表示两个顶点之间存在边,用0表示不存在边,这种方法适用于边的数量相对较()的图。
答案:少4. 在树的遍历中,先序遍历是指先访问()节点,然后再分别先序遍历它的左子树和右子树。
答案:根5. 哈希表通过()将键映射到值。
答案:哈希函数三、简答题(每题10分,共20分)1. 请简要介绍栈和队列的特点和用途。
栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
栈常用于实现程序调用的过程,如函数调用、表达式求值等。
队列是一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。
队列常用于实现排队、任务调度等场景。
2. 请简述二叉搜索树的特点和应用场景。
二叉搜索树是一种有序树结构,每个节点的左子树的值都小于该节点的值,右子树的值都大于该节点的值。
数据结构期末考试题及答案
数据结构期末考试题及答案一、选择题1. 以下哪种数据结构是线性存储结构?A. 树B. 图C. 链表D. 哈希表答案:C2. 栈和队列的共同特点是:A. 只能在一端进行插入和删除操作B. 插入和删除操作在不同的两端进行C. 插入和删除操作在同一端进行D. 没有共同点答案:B3. 在二叉搜索树中,若要查找值为x的节点,当发现一个节点的值大于x时,应该:A. 在该节点的左子树中查找B. 在该节点的右子树中查找C. 停止查找D. 随机查找答案:A4. 快速排序算法的时间复杂度为:A. O(log n)B. O(n log n)C. O(n^2)D. O(1)答案:B5. 下面哪种排序算法适用于大数据量的排序?A. 冒泡排序B. 插入排序C. 快速排序D. 选择排序答案:C二、填空题1. 链表的基本操作包括________、________、________和________。
答案:创建、插入、删除、查找2. 在图的表示中,邻接矩阵法的主要缺点是________,而邻接表法的主要缺点是________。
答案:空间消耗大、查询效率低3. 哈夫曼树是一种基于________的最优二叉树,广泛应用于数据压缩和编码。
答案:字符频率4. 红黑树是一种自平衡的二叉搜索树,它的插入和删除操作能保证最坏情况下的查找时间复杂度对数级,具体为________。
答案:O(log n)5. 散列表(哈希表)解决冲突的方法主要有开放定址法、链地址法和________。
答案:双重散列法三、简答题1. 请简述数组和链表的区别及各自的优缺点。
答案:数组是一种顺序存储结构,它的特点是通过索引直接访问元素,访问速度快,但是大小固定,不便于动态扩展。
链表是非连续的存储结构,元素通过指针连接,可以动态地插入和删除元素,但是访问元素需要从头开始遍历,速度较慢。
2. 描述二分查找的算法过程及其时间复杂度。
答案:二分查找是一种在有序数组中查找特定元素的算法。
《数据结构》期末考试试卷(含答案)
一、选择题(每小题2分,共24分)1.计算机识别、存储和加工处理的对象被统称为( A )A.数据B.数据元素C.数据结构D.数据类型2.栈和队列都是(A)A.限制存取位置的线性结构B.顺序存储的线性结构C.链式存储的线性结构D.限制存取位置的非线性结构3.链栈与顺序栈相比,比较明显的优点是( D )A.插入操作更加方便B.删除操作更加方便C.不会出现下溢的情况D.不会出现上溢的情况4.采用两类不同存储结构的字符串可分别简称为( B )A.主串和子串B.顺序串和链串C.目标串和模式串D.变量串和常量串5.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是:BA. 110 B .108C. 100D. 1206.串是一种特殊的线性表,其特殊性体现在:BA.可以顺序存储 B .数据元素是一个字符C. 可以链接存储D. 数据元素可以是多个字符7.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为:CA. 2h B .2h-1C. 2h+1D. h+1软件开发网8.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。
这里,我们把由树转化得到的二叉树叫做这棵树对应的二叉树。
下列结论哪个正确? AA. 树的先根遍历序列与其对应的二叉树的先序遍历序列相同B .树的后根遍历序列与其对应的二叉树的后序遍历序列相同C. 树的先根遍历序列与其对应的二叉树的中序遍历序列相同D. 以上都不对9.一个有n个顶点的无向图最多有多少边?CA. n B .n(n-1)C. n(n-1)/2D. 2n10.在一个图中,所有顶点的度数之和等于所有边数的多少倍?CA. 1/2 B .1C. 2D. 411.当在二叉排序树中插入一个新结点时,若树中不存在与待插入结点的关键字相同的结点,且新结点的关键字小于根结点的关键字,则新结点将成为(A)A.左子树的叶子结点B.左子树的分支结点C.右子树的叶子结点D.右子树的分支结点软件开发网12.对于哈希函数H(key)=key%13,被称为同义词的关键字是( D )A.35和41B.23和39C.15和44D.25和51二、已知某棵二叉树的前序遍历结果为A,B,D,E,G,C,F,H,I,J,其中中序遍历的结果为D,B,G,E,A,H,F,I,J,C。
数据结构期末考试题
信息技术学院2006-2007学年第二学期期末考试数据结构试卷28(适用班级:)一、判断题:(共10分,每题1分)1.字符串是一种非线性结构。
()2.哈希的查找无需进行关键字的比较。
()3.队列是一种插入和删除操作在表的一端进行的线性表。
()4.若频繁地对线性表进行插入和删除操作,该线性表采用链式存储结构更合适。
()5.稀疏矩阵中0元素的分布有规律,因此可以采用三元组方法进行压缩存储。
()6.若线性表采用顺序存储结构,每个数据元素占用4个存储单元,第12个数据元素的存储地址为144,则第1个数据元素的存储地址是101。
()7.无向完全图的边的个数最大值为n(n-1)。
()8.数组是向量推广。
()9.二叉排序树在进行结点的插入后仍是二叉排序树。
()10.要将指针p得到它所指的结点的下一个结点的数据域值是执行语句p=p->next。
()二、填空题:(共20分,每空2分)1.线性表可以在 _______位置进行插入,栈可以在_____位置进行插入,队列可以在_____位置进行插入。
2.有n各结点的二叉树的最大高度为________,最小高度为___________。
3.在栈的顺序实现中,栈顶指针top,栈为空条件______________。
4.某带头结点的单链表的头指针head,判定该单链表非空的条件________________。
5.设一行优先顺序存储的数组A[5][6],A[0][0]的地址为1100,且每个元素占2个存储单元,则A[2][3]的地址为_____________。
6.有向图所有结点度的和等于他的_______和值。
7.若图的邻接矩阵是对称矩阵,则该图一定是____________。
三、选择题:(共20分,每题2分,)1. 图的深度优先遍历类似于二叉树的_______。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历2.线性表若采用链表存储结构时,要求内存中可用存储单元的地址_________A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以3. 一个序列中有10000个元素,若只想得到其中前10个最小元素,最好采用_______方法A.快速排序B.堆排序C.插入排序D.二路归并排序4.队和栈的主要区别是___________A.逻辑结构不同B.存储结构不同C.所包含的运算个数不同D.限定插入和删除的位置不同5. 已知广义表的表头为a,表尾为(b,c),则此广义表为___________A.(a,(b,c))B.(a,b,c)C.((a),b,c)D.((a,b,c))6.假定一个顺序队列的队首和队尾指针分别为front和rear,存放该队列的数组长度为N,则判断队空的条件为________A.(front+1)% N == rear B.(rear+1)% N == frontC.front == 0 D.front == rear7.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行 ________A.HL = p;p->next = HL;B.p->next = HL;HL = p;C.p->next = HL;p = HL;D.p->next = HL->next;HL->next = p;8.一个无向连通图的生成树是含有该连通图的全部项点的_______。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构试题(C卷)学号:姓名:评分: . 一.单项选择题(30分)1.对二叉树从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用_______次序的遍历实现编号。
a.先序 b.中序 c.后序 d.从根开始的层次遍历2.在有n个叶子结点的哈夫曼树中,其结点总数为_________。
a.不确定b. 2nc. 2n+1d. 2n-13.任何一个无向连通图的最小生成树_______。
a.只有一棵b. 有一棵或多棵c. 一定有多棵d. 可能不存在4.将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为_________。
a. 98b. 99c. 50d. 485.下列排序算法中,______算法可能会出现下面情况:初始数据有序时,花费的时间反而最多。
a.堆排序 b.冒泡排序 c.快速排序 d.SHELL排序6.下图为AOV网,其可能的拓扑有序序列为________。
a. CAEBDF;b. CABFED;c. CABEDFd. CEABFD7.将上图看作无向图,其从C 出发的广度优先遍历结果为_______:a. CABDEFb. CDFEBAc. CDEAFBd. CABFED则结点E在二叉树的第层。
a、1b、2c、3d、49.下列序列中,_______是执行第一趟快速排序后得到的序列(排序的关键字类型是字符串)。
a. [da,ax,eb,de,bb]ff[ha,gc]b. [cd,eb,ax,da]ff[ha,gc,bb]c. [gc,ax,eb,cd,bb]ff[da,ha]d. [ax,bb,cd,da]ff[eb,gc,ha]10.二分查找法要求查找表中各元素的键值必须是________排列。
a. 递增或递减b. 递增c. 递减d. 无序二.填空作图简答题(共70分):1.如下图已知哈希表为空,哈希函数为H(Key)= Key MOD 11, 冲突解决方法分别用线性探测再散列和二次探测再散列。
填入在依次插入关键字14,37,25,16之后的情况,并求等概率情况下查找不成功时的平均查找长度。
(1)线性探测再散列(2)二次探测再散列2.已知图G的邻接表如下,画出图G的所有连通分量。
3.已知一字符串bbcbdebcecbcab,试设计赫夫曼编码并画出相应的赫夫曼树。
4.用堆排序算法(“大顶堆”排序算法)对关键字进行排序,请先建“大顶堆”,然后输出一个堆顶元素, 再调整成堆:初始状态 { 40 , 33 , 24 , 67 , 46 , 79 , 30 ,70 }所建大顶堆{ }输出一个堆顶元素调整后{ }5.用快速排序(取第一个元素作为枢轴或支点)对下列关键字进行排序(图示)70 33 79 67 46 24 30 40写出两趟排序的结果。
一次划分之后: ;分别进行快速排序分别再一次划分之后: .6.对下面的3阶B树依次插入关键码60,14,6,画出插入三个关键码后并删除关键码20后的结果(每一步的结果)。
7.设初始归并段为(10,15,31,∞),(9,20, ∞),(22,34,37, ∞),(6,15,42,∞),(12,37, ∞),(84,95, ∞),试利用败者树进行6路归并,画出选出最小的2个关键码的过程。
数据结构期末试题答案数据结构期末试题答案一、单选题:判断下列各小题叙述的正误。
对,在题号前的括号内填入“√”;错,在题号前的括号内填入“×”。
(每小题3分,共24分)(1)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
A 8B 63.5C 63D 7(2)设有一个二元数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676 (10),每个元素占一个空间,则A[4][5]在()位置,(10)表明用10进数表示。
A 692(10)B 626(10)C 709(10)D 724(10)(3)一个有顺序表有255个对象,采用顺序搜索法查表,平均搜索长度为()A 128B 127C 126D 255(4)含5个节点(元素值均不相同)的二叉搜索树有()种A 54B 42C 36D 65(5)在分析折半搜索的性能时常加入失败结点,即外结点,从而形成扩充的二叉树。
若设失败结点i所在层为l,那么搜索失败到达失败结点时所做的数据比较次数是()。
A li+1B li+2C li-1D li(6)设有一个含200个表项的散列表,用线性探查法解决冲突,按关键码查询时找到一个表项的平均探查次数不超过1.5,则散列存储空间应能够至少容纳()个表项。
(搜索成功的平均搜索长度为Snl=(1+1/(1-a))/2,其中a为装填因子A 400B 526C 624D 676(7)n个顶点的连通图至少有()条边A n-1B nC n+1 D0(8)一个二叉树按顺序方式存储在一个一维数组中,如图则结点E在二叉树的第()层。
A 1B 2C 3D 4二、阅读理解题:说明下面递归过程的功能(10分)int unknown (BinTreeNode * t) {//指针t是二叉树的跟指针。
if (t==NULL) return 0;elseif (t->leftChild==NULL&&t->rightChild==NULL)return 1; else return unknown (t->leftChild)+unknown (t->rightChild); }三、简答题(每小题12分,共36分)1.如下所示的连通图,请画出(1)以顶点为根的深度优先生成树;(6分)(2)如果有关节点,请找出所有的关节点。
(6分)2、设有13个初始归并段,其长度分别为28,16,37,42,5,9,13,14,20,17,30,12,18。
试画出4路归并时的最佳归并树,并计算它的带权路径长度WPL。
3、设散列表HT[0..12],即表的大小为m=13。
采用双散列法解决冲突。
散列函数和再散列函数分别为:H0(key)=key % 13; 注:%是求余数运算(=mod)Hi=(hi-1+REV (key+1) % 11+1)%13; i=1,2,3,...,m-1其中,函数REV(x)表示颠倒10进制数x的各位,如REV(37)=73 REV(7)=7等。
若插入的关键码序列为{2,8,31,20,19,18,53,27}。
试画出插入这8个关键码后的散列表。
四、(10分)已知一棵二叉树如下,请分别写出按前序、中序、后序和层次遍历时得到的结点序列。
五、综合算法题(10)分有一种简单的排序算法,叫做记数排序(count Sorting)。
这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。
必须注意的是,表中所有待排序的关键码互不相同。
记数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小。
假设针对某一个记录,统计出的记数值为 c,那么,这个记录在新的有序表中的合适的存放位置即为c。
(1)给出适用于记数排序的数据表定义;(4分)(2)使用C++语言编写实现记数排序的算法;(4分)(3)对于有n个记录的表,关键码比较次数是多少?(2分)六、程序填空题(10分)下面给出的是一个在二叉树中查找值为x的结点,并打印该结点所有祖先结点的算法。
在此算法中,假设值为x的结点不多于一个。
此算法采用后序的非递归遍历形式。
因退栈时需要区分其左、右子树是否已经遍历,故在结点进栈时附带有一个标志,=0,进入左子树,=1,进入右子树。
用栈ST保存结点指针ptr以及标志tag。
top是栈顶指针。
void print (BintreeNode * t; Type &x) {stack ST; int i, top;top=0; //置空栈while (t ! =NULL&&t->data ! =x ll top ! =0) {while (t ! =NULL&&t->data ! =x) { //寻找值为x的结点1____________;ST[top].ptr=t; //进栈ST[top].tag=0;2_____________;}if (t! =NULL&&t->data==x) //找到值为x的结点for (i=1; 3_______________;i++)cout <<ST.ptr->data << endl;else {while (top > 0&&ST[top].tag==1) //未找到值为x的结点top--;if (top > 0) {ST [top].tag=1; //转向右子树4__________________;}}}} /*print*/(1)请将缺失的语句补上(共4分,每空1分)(2)请给出对于右图所示的二叉树,使用上述算法搜索值为9的结点和值为10的结点的结果,以及在栈ST中的变化。
(top是栈顶指针) (6分)引用:试题答案试题一、(1) B (2) C (3) A (4) B (5) D (6) A (7) A (8) B二、计算二叉树的叶结点个数。
三、1.(1)该连通图从出发做深度优先搜索,得到的深度优先生成树为:(2)关节点为2.因为(13-1)%(4-1)=12%3=0,所以不需要添加空段。
最佳归并树为WPS=(5+9+13+12+16+14+17+18+28+37+20+30)*2+42=4803.散列表HT[0..12],散列函数与再散列函数为H0(key)=key mod 13;Hi=(Hi-1+REV(key+1) mod 11+1) mod 13插入关键码序列为{2,8,31,20,19,18,53,27}H0(2)=2,比较次数为1 H0(8)=8,比较次数为1H0(31)=5,比较次数为1 H0(20)=7,比较次数为1H0(19)=6,比较次数为1 H0(18)=5,冲突,H1=9,比较次数为2H0(53)=1,比较次数为1 H0(27)=1,冲突,H1=7,冲突H2=0,比较次数为3插入8个关键码后的散列表四、前序:A,B,D,G,C,E,F,H中序:D,G,B,A,E,C,H,F后序:G,D,B,E,H,F,C,A层次:A,B,C,D,E,F,G,H五、(1) const int DefaultSize=100;template <class Type> class datalist; //数据表的前视声明template <class Type> class Element { //数据表无元素类的定义private:Type key; //关键码field otherdata; //其它数据成员public:Type getKey ( ) {return key;} //取当前结点的关键码void setKey (const Type x) {key=x;} //将当前结点的关键码修改为x}template <class Type> class datalist { //用顺序表来存储待排序的元素,这些元素的类型是Typepublic:datalist (int MaxSz=DefaultSize) : MaxSize (Maxsz),CurrentSize (0) {Vector=new Element <Type> [MaxSz];}private:Element <Type> * Vector; //存储待排序元素的向量int MaxSize,CurrentSize; //最大元素个数与当前元素个数}(2)[解答1]template <class Type>void countsort (datalist <Type> & initList,datalist <Type> & resultList) {int i,,j,c; Type refer;for (i=0; i<initList,CurrentSize; i++) {c=0;refer :=initList.Vector.getKey ( );for (j=0; j<initList.CurrentSize; j++)if (initList.Vector[j].getKey ( )<refer) c++,resultList.Vector[c]=initList.Vector}resultList.CurrentSize=initList.CurrentSize;}[解答2]template <class Type>void countsort (datalist<Type> &initList {int *c=new int[initList.CurrentSize];for (int i=0; i<initList.CurrentSize; i++) c=0;for (i=0; i<initList.CurrentSize-1; i++)for (int j=i+1; j<initList.CurrentSize; j++)if (initList.Vector[j].getKey( )<initList.Vector.getKey( ))c++; else c[j]++;for (i=0; i<initList.CurrentSize; i++)resultList.Vector[c]=initList.Vector;resultList.CurrentSize=initList.CurrentSize;}(3)[解答一] 关键码比较次数为[解答二] 关键码比较次数为六、(1) top++ t=t->leftChild i<=top t=ST[top].ptr->rightChild(2)搜索值为9的结点ptr tag ptr tag搜索值为10的结点ptr tag ptr tag ptr tag ptr tag ptr tag ptr tagptr tag ptr tag ptr tag ptr tag ptr tag数据结构期末考核试题样例及解答一、单选题从供选择的答案中选出正确的答案,将其编号填入括号中。