数据结构与算法复习题10(C语言版)

合集下载

数据结构c语言版考研试题及答案

数据结构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;}```请注意,以上代码仅为示例,实际编程时需要考虑更多的细节和错误处理。

数据结构(C语言版)复习题

数据结构(C语言版)复习题

一、单项选择题:1、树形结构不具备这样的特点:()A.每个节点可能有多个后继(子节点)B.每个节点可能有多个前驱(父节点)C.可能有多个内节点(非终端结点)D.可能有多个叶子节点(终端节点)2、二叉树与度数为2的树相同之处包括()。

A.每个节点都有1个或2个子节点B.至少有一个根节点C.至少有一个度数为2的节点D.每个节点至多只有一个父节点3、一棵完全二叉树有999个结点,它的深度为()。

A.9B.10C.11D.124、在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()A.s->next=p;p->next=s;B.s->next=p->next;p->next=s;C.s->next=p->next;p=s;D.p->next=s;s->next=p;5、对于一棵具有n个结点、度为5的树来说,()A.树的高度至多是n-3B.树的高度至多是n-4C.树的高度至多是nD.树的高度至多是n-56、在顺序队列中,元素的排列顺序()。

A.由元素插入队列的先后顺序决定B.与元素值的大小有关C.与队首指针和队尾指针的取值有关D.与数组大小有关7、串是一种特殊的线性表,其特殊性体现在()。

A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符若8、顺序循环队列中(数组的大小为6),队头指示front和队尾指示rear的值分别为3和0,当从队列中删除1个元素,再插入2个元素后,front和rear的值分别为()。

A.5和1B.2和4C.1和5D.4和29、一棵完全二叉树上有1001个结点,其中叶子结点的个数为()。

A.250B.500C.254D.50110、已知一个有向图如下图所示,则从顶点a出发进行深度优先遍历,不可能得到的DFS序列为()。

A.adbefc B.adcefb C.adcebf D.adefbc11、在一个带权连通图G中,权值最小的边一定包含在G的()。

c语言版数据结构试题及答案

c语言版数据结构试题及答案

c语言版数据结构试题及答案在学习数据结构的过程中,掌握相关的试题及答案是非常重要的。

本文将为你提供一份C语言版的数据结构试题及答案,帮助你更好地掌握这门学科。

以下是一些常见的数据结构试题及详细的答案解析。

一、单项选择题1. 下列哪个不是数据结构中的逻辑数据结构?A. 栈B. 数组C. 队列D. 链表答案:B解析:数组是一种物理数据结构,用于存储一组相同类型的元素,而不是逻辑上的数据结构。

逻辑上的数据结构指的是在操作时需要考虑元素之间的逻辑关系,如栈、队列和链表。

2. 下列关于栈的叙述中,错误的是:A. 栈是一种后进先出(LIFO)的数据结构B. 栈的插入操作称为入栈C. 栈可以通过数组或链表来实现D. 栈的删除操作称为弹栈或出栈答案:C解析:栈可以通过数组或链表来实现,因此选项C是正确的。

二、填空题1. 将下列序列按照栈的顺序进行入栈,并给出每一步的栈的状态:5, 3, 8, 4, 2答案:- 入栈5,栈的状态:5- 入栈3,栈的状态:5, 3- 入栈8,栈的状态:5, 3, 8- 入栈4,栈的状态:5, 3, 8, 4- 入栈2,栈的状态:5, 3, 8, 4, 2三、简答题1. 请简要解释树的遍历算法中的前序遍历、中序遍历和后序遍历分别是如何进行的?答案:- 前序遍历:先访问当前节点,然后递归地遍历左子树,最后递归地遍历右子树。

- 中序遍历:先递归地遍历左子树,然后访问当前节点,最后递归地遍历右子树。

- 后序遍历:先递归地遍历左子树,然后递归地遍历右子树,最后访问当前节点。

四、编程题1. 请编写一个C语言函数,用于计算给定二叉树的节点个数。

答案:```c#include <stdio.h>struct TreeNode {int value;struct TreeNode* left;struct TreeNode* right;};int countNodes(struct TreeNode* root) {if (root == NULL) {return 0;}else {return 1 + countNodes(root->left) + countNodes(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->value = 1;node1->value = 2;node2->value = 3;root->left = node1;root->right = node2;node1->left = NULL;node1->right = NULL;node2->left = NULL;node2->right = NULL;int nodeCount = countNodes(root);printf("节点个数为:%d\n", nodeCount);return 0;}```解析:上述代码中,通过递归的方式计算二叉树的节点个数。

数据结构(C语言版)1800道题及答案[完整版]

数据结构(C语言版)1800道题及答案[完整版]

数据结构(C语言版)1800道题及答案[完整版]数据结构(C语言版)1800道题及答案[完整版]数据结构1800例题与答案第一章绪论一、选择题(每小题2分)1.算法的计算量的大小称为计算的(B )。

【北京邮电大学2000 二、3 (20/8分)】A.效率 B.复杂性 C.现实性 D.难度2.算法的时间复杂度取决于(C)。

【中科院计算所 1998 二、1 (2分)】A.问题的规模 B.待处理数据的初态 C.A和B D.都不是3.计算机算法指的是(① C ),它必须具备(② B )这三个特性。

① A.计算方法B.排序方法C.解决问题的步骤序列 D.调度方法② A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性C.确定性、有穷性、稳定性 D.易读性、稳定性、安全性【南京理工大学1999 一、1(2分)【武汉交通科技大学1996 一、1(4分)】4.一个算法应该是( B )。

【中山大学 1998 二、1(2分)】A.程序 B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.5.下面关于算法说法错误的是( D )【南京理工大学 2000 一、1(1.5分)】A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的6. 下面说法错误的是(C )【南京理工大学2000 一、2 (1.5分)】(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)7.从逻辑上可以把数据结构分为( C )两大类。

【武汉交通科技大学 1996 一、4(2分)】A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构8.以下与数据的存储结构无关的术语是(D )。

数据结构c语言版期末考试试题

数据结构c语言版期末考试试题

数据结构c语言版期末考试试题work Information Technology Company.2020YEAR《数据结构与算法》复习题一、选择题。

20.如果最常用的操作是取第i个结点及其前驱,则采用 D 存储方式最节省时间。

A.单链表 B.双链表 C.单循环链表 D.顺序表21.在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是B 。

A.O(1) B.O(n) C.O(n2) D.O(nlog2n)27.下述哪一条是顺序存储结构的优点? C 。

A插入运算方便 B可方便地用于各种逻辑结构的存储表示C存储密度大 D删除运算方便35.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是s->next=p->next ;p->next=s;41.以下 B 不是队列的基本运算?A.从队尾插入一个新元素B.从队列中删除第i个元素C.判断一个队列是否为空D.读取队头元素的值47.在循环队列中,若front与rear 分别表示对头元素和队尾元素的位置,则判断循环队列空的条件是 C。

A.front==rear+1 B.rear==front+1 C.front==rear D.front==04.向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行s->next=h->next ;h->next=s50.若栈采用顺序存储方式存储,现两栈共享空间V[1 m],top[1]、top[2]分别代表第1和第2个栈的栈顶,栈1的底在V[1],栈2的底在V[m],则栈满的条件是 B 。

A.|top[2]-top[1]|=0 B. top[1]+1=top[2] C.top[1]+top[2]=m D.top[1]=top[2] 52.允许对队列进行的操作有 D 。

A.对队列中的元素排序 B.取出最近进队的元素 C.在队头元素之前插入元素 D.删除队头元素54.若用一个大小为6的数值来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为 B 。

数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案)

1 绪论沈阳理工大学应用技术学院信息与控制学院计算机科学与技术教研室2011-5-8数据结构复习题:绪论单选题1、在数据结构中,与所使用的计算机无关的数据叫_____结构。

A存储|B物理|C逻辑|D物理和存储2、在数据结构中,从逻辑上可以把数据结构分成______。

A动态结构和静态结构|B紧凑结构和非紧凑结构|C线性结构和非线性结构|D内部结构和外部结构图3、数据结构在计算机内存中的表示是指_______。

数据的存储结构|数据结构|数据的逻辑结构|数据元素之间的关系4、在数据结构中,与所使用的计算机无关的是数据的______结构。

逻辑|存储|逻辑和存储|物理5、在以下的叙述中,正确的是_____。

线性表的线性存储结构优于链表存储结构|二维数组是其数据元素为线性表的线性表|栈的操作方式是先进先出|队列的操作方式是先进后出6、在决定选取何种存储结构时,一般不考虑_______。

各结点的值如何|结束个数的多少|对数据有哪些运算|所用编程语言实现这种结构是否方便7、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_______。

数据的处理方法|数据元素的类型|数据元素之间的关系|数据的存储方法8、下面说法错误的是_______。

(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估计算法执行时间的一个上界(4)同一个算法,实现语句的级别越高,执行效率越低(1)|(1)、(2)|(1)、(4)|(3)9、通常要求同一逻辑结构中的所有数据元素具有相同的特性。

这意味着______。

数据元素具有同一特点|不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致|每个数据元素都一样|数据元素所包含的数据项的个数要相等10、以下说法正确的是_______。

数据元素是数据的最小单位|数据项是数据的基本单位|数据结构是带结构的数据项的集合|一些表面上很不相同的数据可以有相同的逻辑结构11、____是数据的最小单元,_____是数据的基本单位.数据项|数据元素|信息项|表元素12、数据结构是指_____以及它们之间的_____.(1)数据元素(2)结构|(1)计算方法(2)关系|(1)逻辑存储(2)运算|(1)数据映像(2)算法13、计算机所处理的数据一般具备某种内在的关系,这是的指_____.数据和数据之间存在的某种关系|元素和元素之间存在某种关系|元素内部具有某种结构|数据项和数据项之间存在某种关系14、数据的逻辑结构可以分为_____两类.动态结构和表态结构|紧凑结构和非紧凑结构|线性结构和非线性结构|内部结构和外部结构15、数据的逻辑结构是指_____关系的整体.数据元素之间逻辑|数据项之间逻辑|数据类型之间|存储结构之间16、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_____.数据的处理方法|数据元素的类型|数据元素之间的关系|数据的存储方法17、在数据的存储结构中,一个存储结点存储一个_____.数据项|数据元素|数据结构|数据类型18、在计算机的存储器中表示时,物理地址和逻辑地址直接对应并且是连续的,称之为_____.逻辑结构|顺序存储结构|链式存储结构|以上都对19、数据采用链式存储结构时,要求_____.每个结点用占一片连续的存储区域|所有结点占用一片连续的存储区域|结点的最后一个数据域是指针类型|每个结点有多少个后继,就设多少个指针域20、数据的运算_____.效率与采用何种存储结构有关|是根据存储结构来定义的|有算术运算和关系运算两大类|必须用程序设计语言来描述21、下列说法中,不正确的是_____.数据元素是数据的基本单位|数据项是数据中不可分割的最小可标识单位|数据可由若干个数据元素构成|数据项可由若干个数据元素构成22、_____不是算法的基本特性.可行性|长度有限|在规定的时间内完成|确定性23、计算机中算法指的是解决某一问题的有限运算序列,它必须具备输入、输出、_____.可行性、可移植性和可扩充性|可行性、有穷性和确定性|确定性、有穷性和稳定性|易读性、稳定性和确定性24、以下不属于算法特性的是_____.可行性|有输入|确定性|健壮性25、下面关于算法的说法正确的是_____.算法最终必须由程序实现|算法的有穷性是对于任意的一组输入值必须在有穷步骤后结束|算法的可行性是指指令不能有二义性|以上几个都是错误的26、算法的时间复杂度与______有关问题规模|计算机硬件性能|编译程序质量|程序设计语言27、算法分析的主要任务是分析_____.算法是否具有较好的可读性|算法中是否存在语法错误|算法的功能是否符合设计要求|算法的执行时间和问题规模之间的关系28、某算法的时间复杂度为O(n2),表明该算法的_____.问题规模是n2|执行时间等于n2|执行时间与n2成正比|问题规模与n2成正比29、算法分析的目的是_____.找出数据结构的合理性|研究算法中输入和输出关系|分析算法的效率以求改进|分析算法的易读性和文档性30、线性表是具有n个______的有限序列。

数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案)数据结构C语言版试题大全(含答案)第一章:基本概念与算法设计1.1 数据结构的定义与特点数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括了数据的存储、组织和管理方式。

数据结构的特点包括以下几个方面:- 数据元素之间存在某种关系,构成逻辑结构- 对数据元素的操作对应于对其逻辑结构的操作- 数据结构有存储结构,包括顺序存储结构和链式存储结构- 算法是对数据结构的操作步骤的描述和实现1.2 算法的基本概念算法是解决特定问题或完成特定任务的一系列操作步骤。

算法的基本概念包括以下几个方面:- 有穷性:算法必须能在有限步骤内完成- 确定性:算法的每一步骤必须有确定的含义和结果- 可行性:算法的每一步骤必须可行,能够通过执行有限次数实现- 输入:算法接受的输入数据是原始问题的实例- 输出:算法产生的输出数据与输入有明确的关系1.3 算法的描述方法算法可以用自然语言、伪代码或流程图来描述。

常用的伪代码描述方法包括结构化语言和算法描述语言,结构化语言包括顺序结构、分支结构和循环结构。

第二章:线性结构2.1 线性表的定义与基本操作线性表是n个数据元素的有限序列,其中相邻元素之间存在唯一的前驱和后继关系。

线性表的基本操作包括插入、删除、查找和修改等。

2.2 数组与广义表数组是指具有相同数据类型的一组数据元素的集合,可以通过下标访问元素。

广义表是线性表的推广,其中元素可以是基本数据类型或另一个广义表。

第三章:树与二叉树3.1 树的定义与基本术语树是n(n≥0)个结点的一个有限集合,其中满足以下条件:- 有且仅有一个特定的称为根的结点- 其余结点可分为m(m≥0)个互不相交的有限集合,每个集合本身又是一棵树3.2 二叉树的定义与性质二叉树是指每个结点最多有两个子结点的树结构。

二叉树的性质包括以下几个方面:- 深度为k的二叉树最多有2^k-1个结点- 一棵二叉树的第i层最多有2^(i-1)个结点- 在二叉树的第i层上至多有2^(n-i+1)-1个结点(n为树的深度)第四章:图4.1 图的基本概念与术语图是由顶点的有穷非空集合和边的有穷集合组成的。

数据结构c语言版试题及答案

数据结构c语言版试题及答案

数据结构c语言版试题及答案一、选择题(每题2分,共10分)1. 在C语言中,以下哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A2. 若有一个结构体数组,下列哪个函数可以用来初始化数组中的每个元素?A. memsetB. memcpyC. strcpyD. bzero答案:A3. 在C语言中,以下哪个函数用于动态分配内存?A. mallocB. callocC. reallocD. all of the above答案:D4. 对于一个链表,以下哪个操作是正确的?A. 插入节点B. 删除节点C. 遍历链表D. all of the above答案:D5. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A二、填空题(每题3分,共15分)1. 结构体定义的关键字是______。

答案:struct2. 在C语言中,动态分配内存失败时,malloc函数返回______。

答案:NULL3. 单链表的头节点指针通常初始化为______。

答案:NULL4. 双向链表中,每个节点包含______个指针。

答案:两个5. 树的深度优先遍历包括______、中序遍历和后序遍历。

答案:前序遍历三、简答题(每题5分,共20分)1. 请简述C语言中结构体和联合体的区别。

答案:结构体(struct)可以包含不同类型的数据,并且可以有多个实例;联合体(union)可以包含不同类型的数据,但是只能有一个实例,即在任意时刻只能存储其中一个成员的值。

2. 动态内存分配的优点是什么?答案:动态内存分配允许程序在运行时根据需要分配内存,这样可以更有效地使用内存资源,并且可以创建大小不固定的数据结构。

3. 链表相比于数组有哪些优点?答案:链表的优点包括动态大小,可以灵活地插入和删除节点,不需要预先知道数据的大小。

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

习9解答判断题: 1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。

答:FALSE (错。

链表表示的有序表不能用折半查找法。

)2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。

答:FALSE (错。

因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。

)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。

( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。

答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。

答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。

A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3 答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。

A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。

A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。

表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。

答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。

而二次探测再散列的增量序列为:di=12,-12,22,-22,32,…,土k2,(k≤m/2), 沿着增量序列选择不同的增量按照开放定址公式:Hi =( H(key)+di) MOD m i=1,2,…,k (k≤m-1)寻找新的地址(构造后继散列地址)。

计算Hi =( H(49)+di) MOD 14 =(5+di) MOD 14, 可知当( 5+22)MOD 14 = 9 MOD 14 = 9时不再发生冲突,故选择D).10.以下说法错误的是( )。

A.散列法存储的基本思想是由关键码值决定数据的存储地址B. 散列表的结点中只包含数据元素自身的信息,不包含任何指针C.装填因子是散列法的一个重要参数,它反映了散列表的装填程度D. 散列表的查找效率主要取决于散列表造表时选取的散列函数和处理冲突的方法答:B (散列表也可以用单链表存储,故选择B.)11.以下说法正确的是( )。

A.数字分析法需事先知道所有可能出现的键值及所有键值的每一位上各数字分布情况,并且键值的位数比散列地址的位数多B.除余法要求事先知道全部键值C.平方取中法需要事先掌握键值的分布情况D.随机数法适用于键值不相等的场合答:A.12.设有一个用线性探测法解决冲突得到的散列表如下图所示,散列函数为H(k)= k % 11,若要查找元素14,探测的次数是( )。

TA答:D13.散列表的平均查找长度( )。

A.与处理冲突方法有关而与表的长度无关B.与处理冲突方法无关而与表的长度有关C .与处理冲突方法有关且与表的长度有关D .与处理冲突方法无关且与表的长度无关答:C14.在采用线性探测法处理冲突所构成的闭散列表上进行查找,可能要探测多个位置,在查找成功的情况下,所探测的这些位置上的键值( )。

A .一定都是同义词 B. 一定都不是同义词C .都相同 D. 不一定都是同义词答:D(例如,当H(k)=k mod 7且输入的关键字为3、4、10时所构造的散列表如下图所示:当查找关键字成功时,所探测3、4、5位置上的键值:3和10是同义词而4不是同义词。

)15.在采用线性探测法处理冲突的闭散列表上,假定装填因子α的值为0.5,则查找任一元素的平均查找长度为( )。

A .1 B. 1.5 C. 2 D. 2.5答:B (注:线性探测再散列的哈希表查找成功时的平均查找长度为S nl ≈ 21(1 + a-11) (9-27) 参见严蔚敏等《(c 语言版)数据结构》P.261公式9-27。

)16.在采用链接法处理冲突的散列表上,假定装填因子α的值为4,则查找任一元素的平均查找长度为( )。

A .3 B. 3.5 C. 4 D. 2.5答:A (链地址法处理冲突的哈希表查找成功时的平均查找长度为S nc ≈ 1+2a (9-29) 参见严蔚敏等《(c 语言版)数据结构》P.261公式9-29。

)填空题:17.二分查找的存储结构仅限于 ,且是 。

答:顺序存储结构 有序的18.* 在n 个记录的有序顺序表中进行折半查找,最大的比较次数是 。

答: ⎣⎦n 2log +1 (相当于走了一个完全二叉树根到树叶的长度,即⎣⎦n 2log +1;故填⎣⎦n 2log +1.)19.构造哈希(Hash)函数的方法有、、、、和。

答:直接定址法数字分析法平方取中法折叠法除留余数法随机数法20.法构造的哈希函数肯定不会发生冲突。

(重大2000年研究生试题。

)答:直接定址 (参见严蔚敏等《(c语言版)数据结构》P.253)21.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。

答:哈希表查找法22.在散列存储中,装填因子α的值越大,则;α的值越小,则。

答:存取元素时发生冲突的可能性就越大存取元素时发生冲突的可能性就越小简答题:23.比较线性探测、随机探测和链地址法解决冲突的优缺点。

解:线性探测:简单,但可能导致记录的聚集而使探测效率降低;此外记录的个数必须在哈希表允许的范围内。

随机探测:可以克服记录聚集的现象,但需要选取合适的随机函数且记录的个数也有限制。

链地址法:只要空间允许就可插入任意多个记录,并且链表的插入和删除都很方便。

24.在哈希表存储中,发生哈希冲突的可能性与哪些因素有关?为什么?答:在哈希表存储中,发生哈希冲突的可能性与装填因子α、所采用的哈希函数、解决冲突的哈希冲突函数三个因素有关。

这是因为:(1)装填因子α是哈希表中已存入的数据元素n与哈希地址空间大小m的比值,即n/m,显然,当α越小时,冲突的可能性就越小,α越大(最大可取1)时,冲突的可能性就越大;(2)若哈希函数选择得当,就可使哈希地址尽可能均匀地分布在哈希地址空间上,从而减少冲突的发生;否则,若哈希函数选择不当,就可能使哈希地址集中于某些区域,从而加大冲突的发生;(3)若哈希冲突函数选择得当,可以减少再次发生哈希冲突的可能性。

25. 对含有n个数据元素的集合,要找出最大元素和最小元素,请问最少需要多少次比较运算(执行if语句的次数)。

答:我们可以设立两个变量max和min用于存放最大元素和最小元素的位置,第一次取两个元素进行比较,大的放入max,小的放入min,从第2次开始,每次取一个元素先和max比较,如果大于max则以它替换max,并结束本次比较;若小于max则再与min相比较,在最好的情况下,一路比较下来都不用和min相比较,所以这种情况下,至少要进行n-1次比较就能找到最大元素和最小元素。

(最坏情况下,要进行2n-3次比较才能结果)26.请问:对有序的单链表能否进行折半查找?为什么?答:有序的单链表不能进行折半查找的。

因为链表无法进行随机访问,如果要访问链表的中间结点,就必须先从头结点开始进行依次访问,这就要浪费很多时间,还不如顺序查找,而且,用链存储结构将无法判定折半的过程是否结束,因此无法用链表实现折半查找。

27.设有序表为(1、23、34、55、56、57、77、87、99)请分别画出对给定值23,56,98进行折半查找的过程。

(并注明每次循环的各参数变量的结果)答:23的查找过程如下(其中括号表示当前查找区间,圆括号表示当前比较的关键字)下标: 1 2 3 4 5 6 7 8 9第一次比较:[ 1 23 34 55(56)57 77 87 99]low=1high=9mid=5第二次比较:[ 1(23)34 55] 56 57 77 87 99]low=1high=4mid=256的查找过程如下(其中括号表示当前查找区间,圆括号表示当前比较的关键字)下标: 1 2 3 4 5 6 7 8 9第一次比较:[ 1 23 34 55(56)57 77 87 99]low=1high=9mid=598的查找过程如下(其中括号表示当前查找区间,圆括号表示当前比较的关键字)下标: 1 2 3 4 5 6 7 8 9第一次比较:[ 1 23 34 55(56)57 77 87 99]low=1high=9mid=5第二次比较: 1 23 34 55 56 [57 (77) 87 99]low=6high=9mid=7第三次比较: 1 23 34 55 56 57 77[(87) 99]low=8high=9mid=8第四次比较: 1 23 34 55 56 57 77 87[(99)]low=9high=9mid=9第五次比较: 1 23 34 55 56 57 77 87 99low=9high=8low>high 查找不成功。

计算题:28.设有一组关键字{19,01,23,14,55,20,84,27,68,11,10,77},采用哈希函数H(key)=key % 13,采用开放地址法(开放定址法)的二次探测再散列方法解决冲突,试在0~18的散列地址空间中对该关键字序列构造哈希表。

解:依题意,n=19,二次探测再散列的下一地址计算公式为:其计算如下:H(19)=19 % 13 =6H(01)=01 % 13 =1H(23)=23 % 13 =10H(14)=14 % 13 =1(冲突)H(14)=(1+1*1) % 19 =2H(55)=55 % 13 =3H(20)=20 % 13 =7H(84)=84 % 13 =6(冲突)H(84)=(6 + 1*1) % 19 =7(仍冲突)H(84)=(6 - 1*1) % 19 =5H(27)=27 % 13 =1(冲突)H(27)=(1+1*1) % 19 =2(冲突)H(27)=(1-1*1) % 19 =0H(68)=68 %13 =3(冲突)H(68)=(3+1*1) %19 =4H(11)=11 % 13 =11H(10)=10 % 13 =10(冲突)H(10)=(10+1*1) % 19 =11(仍冲突)H(10)=(10-1*1) % 19 =9H(77)=77 %13 =12因此:各关键字的记录对应的地址分配如下:addr(27) = 0addr(01) = 1addr(14) = 2addr(55) = 3addr(68) = 4addr(84) = 5addr(19) = 6addr(20) = 7addr(10) = 9addr(23) = 10addr(11) = 11addr(77) = 12其他地址为空。

相关文档
最新文档