西安理工考研数据结构初试题
数据结构c语言版考研试题及答案

数据结构c语言版考研试题及答案# 数据结构C语言版考研试题及答案## 试题### 一、选择题(每题2分,共20分)1. 在数据结构中,线性表的顺序存储结构通常使用什么数据结构来实现?A. 栈B. 队列C. 数组D. 树2. 以下哪个算法不是排序算法?A. 冒泡排序B. 选择排序C. 快速排序D. 哈希算法3. 在二叉树中,若某节点的左子树只包含左子节点,右子树为空,则该二叉树是:A. 满二叉树B. 完全二叉树C. 斜树D. 二叉搜索树4. 哈希表的冲突可以通过哪些方法解决?A. 链地址法B. 开放地址法C. 再哈希法D. 所有以上5. 以下哪个不是图的遍历算法?A. 深度优先搜索(DFS)B. 广度优先搜索(BFS)C. 欧拉路径D. 归并排序### 二、简答题(每题10分,共30分)1. 请简述链表和数组的区别。
2. 解释什么是二叉搜索树,并简述其基本操作。
3. 描述图的邻接矩阵表示法和邻接表表示法的优缺点。
### 三、编程题(每题25分,共50分)1. 编写一个C语言函数,实现单链表的反转。
2. 编写一个C语言程序,实现二叉搜索树的插入操作。
## 答案### 一、选择题1. C 数组2. D 哈希算法3. C 斜树4. D 所有以上5. D 归并排序### 二、简答题1. 链表和数组的区别:- 存储方式:数组是连续的内存空间,链表是分散的。
- 空间使用:数组在定义时需要指定大小,链表可以动态扩展。
- 访问速度:数组支持随机访问,链表只能顺序访问。
2. 二叉搜索树:- 定义:每个节点的值大于其左子树所有节点的值,小于其右子树所有节点的值。
- 基本操作:插入、删除、查找。
3. 图的表示法:- 邻接矩阵:使用二维数组表示,容易实现,但空间消耗大。
- 邻接表:使用链表表示,空间利用率高,但遍历效率低。
### 三、编程题1. 单链表反转函数:```ctypedef struct Node {int data;struct Node *next;} Node;void reverseList(Node head) {Node *prev = NULL, *curr = *head, *next = NULL;while (curr != NULL) {next = curr->next;curr->next = prev;prev = curr;curr = next;}*head = prev;}```2. 二叉搜索树插入程序:```ctypedef struct BSTNode {int data;struct BSTNode *left, *right;} BSTNode;BSTNode* insert(BSTNode* node, int data) {if (node == NULL) {node = (BSTNode*)malloc(sizeof(BSTNode));node->data = data;node->left = node->right = NULL;} else if (data < node->data) {insert(node->left, data);} else {insert(node->right, data);}return node;}```请注意,以上代码仅为示例,实际编程时需要考虑更多的细节和错误处理。
计算机数据结构考研真题及其答案

计算机数据结构考研真题及其答案-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN第1章绪论一、选择题1. 算法的计算量的大小称为计算的();A.效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于();A.问题的规模 B. 待处理数据的初态 C. A和B3.计算机算法指的是(),它必须具备()这三个特性; (1)A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2)A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性4.一个算法应该是();A.程序 B.问题求解步骤的描述 C.要满足五个基本特性D.A和C5. 下面关于算法说法错误的是();A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的6. 下面说法错误的是();(1)算法原地工作的含义是指不需要任何额外的辅助空间;(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法;(3)所谓时间复杂度是指最坏情况下,估2算算法执行时间的一个上界;(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)7.从逻辑上可以把数据结构分为()两大类;A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构8.以下与数据的存储结构无关的术语是();A.循环队列 B. 链表 C. 哈希表D. 栈9.以下数据结构中,哪一个是线性结构();A.广义表 B. 二叉树 C. 稀疏矩阵D. 串10.以下那一个术语与数据的存储结构无关();A.栈 B. 哈希表 C. 线索树 D. 双向链表11.在下面的程序段中,对x的赋值语句的频度为();3FOR i:=1 TO n DOFOR j:=1 TO n DOx:=x+1;A. O(2n) B.O(n) C.O(n2)n)D.O(log212.程序段 FOR i:=n-1 DOWNTO 1 DOFOR j:=1 TO i DOIF A[j]>A[j+1]THEN A[j]与A[j+1]对换;其中 n为正整数,则最后一行的语句频度在最坏情况下是();A. O(n)B. O(nlogn)C. O(n3)D. O(n2)13.以下哪个数据结构不是多型数据类型();A.栈 B.广义表 C.有向图 D.字符串14.以下数据结构中,()是非线性数据结构;A.树 B.字符串 C.队 D.栈15. 下列数据中,()是非线性数据结构;A.栈 B. 队列 C. 完全二叉树 D. 堆16.连续存储设计时,存储单元的地址();A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续417.以下属于逻辑结构的是();A.顺序表 B. 哈希表 C.有序表 D. 单链表二、判断题1. 数据元素是数据的最小单位。
数据结构c考研试题及答案

数据结构c考研试题及答案数据结构C考研试题及答案1. 选择题1.1 以下哪个选项不是线性表的顺序存储结构的特点?A. 存储空间连续B. 存储空间不连续C. 可以随机访问D. 插入和删除操作效率低答案:B1.2 在二叉树的遍历中,先访问根节点,然后遍历左子树,最后遍历右子树,这种遍历方式称为:A. 前序遍历B. 中序遍历C. 后序遍历D. 层序遍历答案:A2. 填空题2.1 在一个长度为n的数组中,使用二分查找法查找一个元素,最坏情况下需要比较的次数为______。
答案:log2(n+1)-12.2 哈希表的冲突解决方法有多种,其中一种方法是______。
答案:链地址法3. 简答题3.1 请简述图的深度优先搜索(DFS)算法的步骤。
答案:深度优先搜索算法的步骤如下:1. 访问起始顶点;2. 对于起始顶点的每一个邻接顶点,如果未被访问,则递归地进行深度优先搜索;3. 继续对未访问的邻接顶点进行步骤2,直到所有邻接顶点都被访问;4. 回溯到上一个顶点,继续访问未访问的邻接顶点,直到所有顶点都被访问。
3.2 什么是堆排序算法?请简要描述其工作原理。
答案:堆排序算法是一种基于二叉堆的比较排序算法。
其工作原理如下:1. 将待排序的序列构造成一个大顶堆;2. 将堆顶元素,即当前最大值,与序列末端元素进行交换,然后将序列长度减一;3. 对新的堆顶元素调整为新堆的堆顶;4. 重复步骤2和3,直到堆的大小为1或0。
4. 编程题4.1 编写一个函数,实现单链表的反转。
答案:```cstruct ListNode {int val;struct ListNode *next;};struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev = NULL;struct ListNode* curr = head;struct ListNode* next = NULL;while (curr != NULL) {next = curr->next;curr->next = prev;prev = curr;curr = next;}head = prev;return head;}```4.2 给定一个二叉搜索树的根节点,请实现一个函数,返回树中任意两个节点的值的差的绝对值的最小值。
数据结构试题集(含答案)

第一章概论一、选择题1、研究数据结构就是研究( D )。
A. 数据的逻辑结构B. 数据的存储结构C. 数据的逻辑结构和存储结构D. 数据的逻辑结构、存储结构及其基本操作2、算法分析的两个主要方面是(A)。
A. 空间复杂度和时间复杂度B. 正确性和简单性C. 可读性和文档性D. 数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。
A. 图B. 树C. 广义表D. 栈4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、(B)等5个特性。
A. 可执行性、可移植性和可扩充性B. 可执行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是(C)。
for(i=0;i<m;i++)for(j=0;j<n;j++)a[i][j]=i*j;A. O(m2)B. O(n2)C. O(m*n)D. O(m+n)6、算法是( D )。
A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。
A. O(n)B. O(nlog2n) C. O(n2) D. O(log2n)8、下面程序段的时间复杂度为( C )。
i=1;while(i<=n)i=i*3;A. O(n)B. O(3n)C. O(log3n) D. O(n3)9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的( B )和运算等的学科。
A. 结构B. 关系C. 运算D. 算法10、下面程序段的时间复杂度是( C )。
i=s=0;while(s<n){i++;s+=i;}A. O(n)B. O(n2)C. O(√n)D. O(n3)11、抽象数据类型的三个组成部分分别为( A )。
A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是( A )。
数据结构 排序 历年考研练习题库 试卷及答案

数据结构排序历年考研练习题库试卷及答案数据结构排序历年考研练习题库试卷及答案一、冒泡排序冒泡排序是一种基本的排序算法,它通过重复地交换相邻两个元素的位置来实现排序。
算法的基本思想是从待排序的元素中比较相邻的两个元素大小,并根据需要交换它们的位置,直到整个序列有序为止。
冒泡排序的原理如下:首先从序列的第一个元素开始,比较相邻的两个元素的大小,若前面的元素大于后面的元素,则交换它们的位置;否则,继续比较下一对相邻元素,直到比较到序列的最后一个元素。
这样一趟比较下来,序列中最大的元素就会被交换到最后一个位置。
接着,对序列中剩下的 n-1 个元素重复上述过程,执行 n-1 趟比较,直到整个序列有序。
在实践中,冒泡排序的时间复杂度为 O(n^2),其中 n 为待排序序列的长度。
尽管冒泡排序存在其它更好的排序算法,但它具有编码简单、实现容易以及对小规模数据排序的优势。
二、选择排序选择排序也是一种简单直观的排序算法,它的思想是将待排序序列分为已排好序的部分和未排序的部分,每次选取未排序部分中最小(或最大)的元素,将其放置在已排好序的部分的末尾。
重复此过程,直到整个序列有序。
选择排序的具体步骤如下:首先从待排序序列中找到最小(或最大)的元素,然后将其与序列的第一个元素交换位置,将该元素视为已排序部分;接着,在剩下的未排序部分中找到最小(或最大)的元素,将其与第二个元素交换位置,将该元素视为已排序部分的最后一个元素;以此类推,每次选择序列中最小(或最大)的元素,并将该元素放置在已排序部分的末尾。
最终完成排序。
选择排序的时间复杂度同样为 O(n^2),其中 n 为待排序序列的长度。
相比于冒泡排序,选择排序的交换操作较少,因此在实际应用中,选择排序的性能要优于冒泡排序。
三、插入排序插入排序是一种简单直观的排序算法,它的基本思想是将待排序的元素逐个插入已排好序的部分中,直到整个序列有序。
与冒泡排序和选择排序不同,插入排序是一种原地排序算法。
数据结构的考研题库及答案

数据结构的考研题库及答案数据结构是计算机科学中非常重要的一门学科,它研究的是如何组织和管理数据以及数据之间的关系。
对于考研学生来说,数据结构是一个必考的科目,因此熟悉考研题库及答案对于备考非常重要。
一、数据结构的考研题库数据结构的考研题库通常包含选择题和填空题两种类型。
选择题是通过给定的选项选择正确答案,而填空题则需要考生填写正确的答案。
在选择题中,常见的考点包括线性表、栈和队列、树和二叉树、图等。
例如,考生可能会遇到如下题目:下列关于栈的说法中,错误的是(A)栈是一种先进后出的数据结构(B)栈的插入操作称为入栈(C)栈的删除操作称为出栈(D)栈的插入和删除操作都在栈顶进行。
正确答案是(A)栈是一种先进后出的数据结构。
填空题则更加注重对知识点的理解和应用。
例如,考生可能会遇到如下题目:设有一个长度为n的线性表L,其中元素按非递增顺序排列。
设计一个算法,删除线性表中所有值相同的元素,要求时间复杂度为O(n)。
正确答案是:从前向后扫描线性表,用一个变量count记录不同元素的个数,然后将不同的元素依次放到线性表的前count个位置。
二、数据结构的考研答案对于考生来说,除了了解考研题库外,掌握正确的答案也是备考的重要一环。
在选择题中,正确答案通常是通过对题目进行分析和推理得出的。
考生需要仔细阅读题目,理解题意,然后根据自己对知识点的掌握程度选择正确答案。
在填空题中,考生需要根据题目要求,运用所学的知识点进行分析和解答。
对于一些较难的填空题,考生可以通过构造示例或者推导过程来得到答案。
除了了解答案外,考生还需要掌握解题的方法和技巧。
对于选择题,考生可以通过排除法和对选项进行比较来确定正确答案。
对于填空题,考生可以根据题目给出的条件和要求,运用相应的算法和数据结构进行求解。
三、备考数据结构的建议备考数据结构,考生需要系统地学习相关的知识点,并进行大量的练习和总结。
以下是一些建议:1. 系统学习:根据教材或者相关资料,系统地学习数据结构的基本概念、常见算法和数据结构的实现方法等。
《数据结构C语言》考研复习题库

《数据结构C语言》考研复习题库一、选择题1、在一个具有 n 个单元的顺序栈中,假定以地址低端(即 0 单元)作为栈底,以 top 作为栈顶指针,当做出栈处理时,top 变化为()。
A top 不变B top = 0C topD top++答案:C解释:在顺序栈中,出栈操作会使栈顶指针 top 减 1,即 top。
2、一个队列的入队序列是 1,2,3,4,则队列的输出序列是()。
A 4,3,2,1B 1,2,3,4C 1,4,3,2D 3,2,4,1答案:B解释:队列是先进先出的数据结构,入队顺序为 1,2,3,4,那么出队顺序也为 1,2,3,4。
3、串是一种特殊的线性表,其特殊性体现在()。
A 可以顺序存储B 数据元素是一个字符C 可以链式存储D 数据元素可以是多个字符答案:B解释:串的数据元素是字符,这是它与一般线性表的区别。
4、设有一个 10 阶的对称矩阵 A,采用压缩存储方式,以行序为主存储,a11 为第一元素,其存储地址为 1,每个元素占一个地址空间,则 a85 的地址为()。
A 33B 32C 18D 40答案:A解释:对于对称矩阵,只存储其下三角或上三角部分。
对于一个 n阶对称矩阵,若以行序为主存储下三角部分,aij 的存储位置为 i(i 1)/2 + j 1。
所以 a85 的地址为 8(8 1)/2 + 5 1 = 33。
5、一棵完全二叉树共有 700 个结点,则在该二叉树中有()个叶子结点。
A 350B 349C 351D 不确定答案:C解释:根据完全二叉树的性质,度为 1 的结点个数最多为 1 个。
设n0 为叶子结点个数,n1 为度为 1 的结点个数,n2 为度为 2 的结点个数。
则 n = n0 + n1 + n2 ,n 1 = 2n2 + n1 。
因为 n = 700 ,且 n1 为 0或 1 ,通过计算可得 n0 = 351 。
二、填空题1、数据的逻辑结构被分为_____、_____、_____和_____四种。
数据结构考研真题及其答案_研究生入学考试_高等教育_教育专区 数据结

数据结构考研真题及其答案_研究生入学考试_高等教育_教育专区数据结结考研真题及其答案据结构是计算机科学中重要的一门课程,它研究的是如何组织和管理数据的方式。
对于计算机专业的研究生来说,数据结构是必修课程,考研真题的复习和备考对于学生来说是非常重要的。
在本文中,我们将介绍一些数据结构考研真题及其答案,帮助学生更好地复习和备考。
第一题:给出以下数据结构中各个操作的时间复杂度:数组、链表、堆、栈、队列。
答案:数组的插入和删除操作的时间复杂度为O(n),查找操作的时间复杂度为O(1);链表的插入和删除操作的时间复杂度为O(1),查找操作的时间复杂度为O(n);堆的插入、删除和查找操作的时间复杂度都为O(logn);栈的插入、删除和查找操作的时间复杂度都为O(1);队列的插入、删除和查找操作的时间复杂度都为O(1)。
第二题:给出以下数据结构的特点:栈、队列、堆、二叉树、图。
答案:栈是一种后进先出(LIFO)的数据结构,只能在一端进行插入和删除操作;队列是一种先进先出(FIFO)的数据结构,插入操作在一端进行,删除操作在另一端进行;堆是一种完全二叉树,具有父节点的值大于等于子节点的值(大顶堆)或父节点的值小于等于子节点的值(小顶堆)的性质;二叉树是一种每个节点最多有两个子节点的树;图是由节点和连接节点的边组成的数据结构。
第三题:给定一个有序数组,要求在其中查找一个元素的位置并返回,如果找不到则返回-1,设计一个算法实现上述功能。
答案:可以使用二分查找算法来实现上述功能。
首先,将要查找的元素与有序数组的中间元素进行比较,如果相等,则返回中间元素的位置;如果要查找的元素小于中间元素,则在数组的前半部分继续进行二分查找;如果要查找的元素大于中间元素,则在数组的后半部分继续进行二分查找。
重复这个过程,直到找到要查找的元素或者确定元素不存在为止。
第四题:给出以下排序算法的时间复杂度:冒泡排序、插入排序、选择排序、快速排序、归并排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安理工大学
2016年攻读硕士学位研究生入学考命题纸
考试科目:数据结构863
一、单项选择题(共30分,每小题2分)
1、考虑将栈定义为顺序存储的栈还是链式存储的栈,是在选择数据的( d )。
a.逻辑结构
b.物理结构
c.相互关系
d.操作方法
2、在一个长度为n的顺序线性表中顺序査找值为x的元素时,查找成功时的平均查找长度为( c )(假定找每个元素的概率都相等)
a.n
b.(n+1)/2
c.n/2
d.(n-1)/2
3、组成数据的基本单位是( c )。
a.数据项
b.数据类型
c.数据元素
d.数据变量
4、设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<2,4>,
<4,1>},则数据结构A是( c )。
a.线性结构b树型结构 c.图型结构 d.集合
5、深度为K(K>=1)的二叉树至多有(c)个结点。
a.2k+1
b.2k-1
c.2k-1
d.2k-1
6、设某完全无向图中有n个顶点,则该完全无向图中有(a)条边。
a.n(n-1)/2
b.n(n-1)
c.n2
d.n2-1
7、二叉链表作为二叉树的存储结构,在具有n(n>0)个结点的二叉链表中空链域的个数为( c )
a.2n-1
b. n-1
c. n+1
d.2n+1
8、已知一个有向图的邻接矩阵,要想删除所有以第i个点为起始点的弧,应该(c)
a.删除邻接矩阵的第i行
b.除邻接矩阵的第i列
c.将邻接矩阵的第i行置零
d.将邻接矩阵的第i列置零
9、设无向图G中有n个点e条边,则其对应的邻接表中的表头结点和表结点的个数分别为(d)。
课本164页
a. n, e
b.e,n
c. 2n, e
d.n,2e
10、设某强通图中有n个顶点,则该强道通图中至少有(c)条边。
a. n(n-1)
b. n+1
c. n
d. n(n+1)
11、下列四种排序中( a )的空间复杂度最大。
a.快速排序
b.冒泡排序
c.希尔排序
d.堆
12、设某二叉树中度数为0的结点数为N0,度数为1的结点数为N1,度数为2的结点数为N2,则下列等式成立的是( c)课本117性质3
a. N0=N1+1
b. N0=N1+N2
c. N0=N2+1
d. N0=2N1+1
13、若要求算法的时间复杂度为O( nlogn),且要求排序是稳定的,则可选择的排序方法
是(c)课本264表9.1
a.快速排序
b.堆排序
c.归并排序
d.直接插入排序
14、设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为(d)
a.O(1og2n)
b.O(1)
c.O(n2)
d. O(n)
15、设有序表中有1000个元素,则用二分查找査找元素X最多需要比较(b)次。
a.25
b.10
c.7
d.1
二、判断題(正确的画“√”,错误的画“×”)(共30分,每小题2分)
1、算法和程序没有区别,所以在数据结构中二者是通用的。
(×)
2、对于一棵二叉树,任意给定先序序列、中序序列和后序序列中的两个,都能够唯确定出该二叉树的形状。
(×)
3、顺序存储结构只能存储线性结构,链式存储结构只能存储非线性结构。
(×)
4、中序遍历二叉排序树一定可以得到一个有序的序列。
(√)
5、对于图结构,调用一次深度优先遍历可以访问到图中的所有顶点。
(×)
6、带权无向图的最小生成树是唯一的。
(×)
7、完全二叉树一定是满二叉树,满二叉树不一定是完全二叉树。
(×)
8、存储无向图的邻接矩阵不一定是对称的。
(×)
9、折半插入排序的排序时间代价与初始数据无关。
(×)
10、连通分量是无向图中的极小连通子图。
(√)
11、折半查找只能在有序的顺序表上进行。
(√)
12、理想情况下,在散列表上搜索一个元素的时间复杂度为O(1)。
(√)
13、线性表的顺序存储结构比链式存储结构更好。
(×)
14、最小生成树就是指图的边数最少的生成树。
(×)
15、度不大于二的树就是二叉树。
(×)
三、填空题(共30分,每空2分)
1、数据结构是指(数据元素的集合)及其相互之间的关系。
2、在顺序存储的队列中,为了解决(假溢出)问题引入了循环队列。
课本74页
3、数据结构研究数据的逻辑结构、数据的存储结构和(数据的物理结构)三方面的问题。
4、当线性表的元素总数基本稳定,且很少进行插入和別除操作,应采用(顺序)存储结构。
5、设有一个顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素的出栈顺序为s2,s3,s4,s6,s5,s1,则顺序栈的容量至少应为(3)。
6、普里姆算法的时间复杂度为(O(n2)),与网中的边数无关,因此求边稠密的网的最小生成树更加适合。
课本181页
7、在图的广度优先搜算法中用到了(队列)数据结构。
课本175页
8、在有n个叶子结点的哈夫曼( Huffman)树中,结点总数是(2n-1)。
9、设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中
(n-i+1)个数据元素;删除第主i个位置上的数据元素需要移动表中(n-i)个元素。
课本25和27页
10、已知一棵二叉树的中序遍历序列为BCAED、后序遍历序列为CBEDA,其先序遍
历的序列为(ABCDE)。
11、在有序表(12,24,36,48,60,72,84)中二分査找关键字72时所需进行的关键字比较次数为(2)。
12、设一组初始记录关键字序列为(20,18,22,16,30,19),则根据这些初始关键字序列建成的初始堆为()。
13、设有向图G的存储结构用邻接矩阵A来表示,则A中第i行中所有非零元素个数
之和等于顶点i的(出度),第i列中所有非零元素个数之和等于顶点i的(入度)。
四、简答题(共30分,每小题5分)
1、设一组初始记录关键字集合为(25,10,8,66,27,32,46),散列表的长度为8,散列函数H(k)=kmod7,要求分别用线性探测再散列和链地址法作为解决冲突的方法设计哈希表,并给出在等概率查找情况下,两种哈希表的平均查找长度。
2、从空树起,依次插入关键字40,23,12,8,90,15,62,95,70,32,13,构造一棵二叉排序树。
(1)画出该二叉排序树。
(2)画出删去该树中元素值为23的结点之后的二叉排序树。
3.假设用于通讯的电文由,9个字母{A,B,C,D,E,F,G,H,I}组成,各字母在电文中出现的概率分别为0.06,0.19,0.09,0.10,0.08,0.14,0.20,0.03,0.11,试为这9个字母设计哈夫曼树,并写出对应的哈夫曼编码。
设频率小的在结点的左边,频率大的在结点的右边。
4.已知树如图1所示,
(1)写出该树的后序遍历序列
(2)画山由该树转换得到的二叉树。
5、有如图2所示的二叉树,试画出中序线索二叉树,写出该线索二叉树的链式存储结点结构,并画出其中序线索链表结构。
图2
6、已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7};
E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};
给出用克鲁斯卡尔算法构造最小生成树的过程,写出在最小生成树中依次得到的各条边。
五、算法设计题(共30分,每小题10分)
用C或Pascal(类C和类Pascal也可)完成以下题目。
要求写出实现算法的函数或过程即可,不必写出整个程序,对算法要加以适当的注解
1、已知带头结点的单链表L中的结点数据是整数且按值递增排列,设单链表结点类型定义如下。
typedef struct Node {
Datatype data;
Stret Node *next ;
} Lnode, *LinkList;
1)编写一个算法,将值为x的结点插入到表L中,使得L仍然有序。
2)编写一个算法,在该链表上实施查找数据值为key的査找运算,算法返回指向该结点的指针。
2、设有如下的二叉链表存储的二叉排序树,其结点类型定义为
typedef struct node
{
int data;
Struct node *lchild, *rchild;
} Bstree;
1)编写一个递归算法,统计二叉树t中叶子结点的个数。
2)编写一个递归算法,可以统计树的深度。
3、试写出冒泡排序算法将整型数组A[1….N]按从大到小的次序进行排序,要求排序过程中能够考虑没有达到既定循环次数,可以提前结束排序大循环的情况。