第八章查找习题_数据结构范文
《数据结构》吕云翔编著第8章查找习题解答
第8 章查找课后习题解答一、选择题1.已知一个有序表为(12,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,经过()次比较后查找成功。
A 2B 3C 4D 5【解答】A2.已知10个元素(54,28,16,73,62,95,60,26,43),按照依次插入的方法生成一棵二叉排序树,查找值为62的结点所需比较次数为()。
A 2B 3C 4D 5【解答】B3.已知数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉排序树,则该树的深度为()。
A 4B 5C 6D 7【解答】B4.按()遍历二叉排序树得到的序列是一个有序序列。
A 前序B 中序C 后序D 层次【解答】B5一棵高度为h的平衡二叉树,最少含有个结点。
A 2hB 2 h -1C 2 h +1D 2 h -1【解答】D6.在散列函数H(k)= k mod m中,一般来讲,m应取()。
A 奇数B 偶数C 素数D 充分大的数7.静态查找与动态查找的根本区别在于()。
A 它们的逻辑结构不一样B 施加在其上的操作不同C 所包含的数据元素的类型不一样D 存储实现不一样【解答】B【分析】静态查找不涉及插入和删除操作,而动态查找涉及插入和删除操作。
8. 长度为 12的有序表采用顺序存储结构,采用折半查找技术,在等概率情况下,查找成功时的平均查找长度是(),查找失败时的平均查找长度是()。
A 37/12B 62/13C 3 9/12D 49/13【解答】A,B9. 用n个键值构造一棵二叉排序树,其最低高度为()。
A n/2B nC log2nD log2n+1【解答】D【分析】二叉排序树的最低高度与完全二叉树的高度相同10. 二叉排序树中,最小值结点的()。
A 左指针一定为空B 右指针一定为空C 左、右指针均为空D 左、右指针均不为空【解答】A【分析】在二叉排序树中,值最小的结点一定是中序遍历序列中第一个被访问的结点,即二叉树的最左下结点。
数据结构(查找)练习题与答案
1、静态查找表和动态查找表的区别是( )。
A.所包含的数据元素的类型不同B.施加其上的操作不同C.它们的逻辑结构相同D.以上都不对正确答案:B解析:B、若在查找的同时对表做修改操作(如插入和删除),则相应的查找表称之为动态查找表。
若在查找中不涉及表的修改操作,则相应的查找表称之为静态查找表。
2、顺序查找法适合于存储结构为( )的线性表。
A.索引存储B.压缩存储C.顺序存储或者链式存储D.哈希存储正确答案:C解析:C、顺序查找可以从前向后或者从后向前挨次查找,既适合于顺序存储结构也适合于链式存储结构。
3、采用顺序查找方法查找长度为n 的顺序表时,在等概率时成功查找的平均查找长度为( )。
A.(n-1)/2B.nC.n/2D.(n+1)/2正确答案:D解析:D、顺序查找时,元素ai 需i 次比较,成功查找的平均查找长度=(1+2+ …+n)/n=(n+1)/2。
4、采用顺序查找方法查找长度为n 的顺序表时,在等概率时不成功查找的平均查找长度为( )。
A.(n-1)/2B.nC.n/2D.(n+1)/2正确答案:B解析:B、当查找的元素不在线性表中时,均需要n 次元素之间的比较。
5、适合于折半查找的数据组织方式是( )。
A.以链表存储的有序线性表B.以顺序表存储的有序线性表C.以链表存储的线性表D.以顺序表存储的线性表正确答案:B解析:B、折半查找的数据必须是有序的。
此外,折半查找中需要确定查找区间,这要求存储结构最好具有随机存取特性,而顺序表满足这个特性。
6、采用折半查找方法查找长度为n 的线性表,当n 很大时,在等概率时不成功查找的平均查找长度为( )。
n)A. O(nlog2B. O(n2)C. O(n)n)D. O(log2正确答案:D解析:D、采用折半查找时,若n 很大,对应的判定树可以看成是一棵满二叉树,失败节点(外部节点)集中在最下一层,落在每一个失败节点时比较的次都均为log n。
27、设有100 个元素的有序表,采用折半查找方法,在等概率时成功时最大的比较次数是( )。
数据结构习题及答案 (1)
第八章查找一、判断题1.用二分查找法对一个顺序表进行查找,这个顺序表可以是按各键值排好序的,也可以是没有按键值排好序的。
()2.哈希表的查找不用进行关键字的比较。
()3.哈希表的定义函数H(key)=key%p(p<=m)这种方法是直接定址法。
()4.装填因子α的值越大,就越不容易发生冲突。
( )5.选择hash函数的标准为:随机性好、均匀性好和尽量避免冲突。
( )参考答案:1、×2、×3、×4、×5、√二、填空题1.顺序查找法的平均查找长度为__________,二分查找法的平均查找长度为________,分块查找法(以顺序查找确定块)的平均查找长度为__________,分块查找法(以二分查找确定块〉的平均查找长度为_________,哈希表查找法采用链接法处理冲突时的平均查找长度为_________。
(n+1)/2;((n+1)*log2(n+1))/n-1;(s2+2s+n)/2s;log2(n/s+1)+s/2;1+α2.在各种查找方法中,平均查找长度与结点个数n无关的查法方法是_________哈希表查找3.二分查找的存储结构仅限于_________,且是__________。
顺序;有序的4.在分块查找方法中,首先查找__________,然后再查找相应的___________。
索引;块5.长度为255的表,采用分块查找法,每块的最佳长度是____________。
156.在散列函数H(key)=key%p中,p应取_______________。
小于表长的最大素数7.假设在有序线性表A[1..20]上进行二分查找,则比较一次查找成功的结点数为_________,则比较二次查找成功的结点数为__________,则比较三次查找成功的结点数为_________,则比较四次查找成功的结点数为________,则比较五次查找成功的结点数为_________,平均查找长度为_________。
数据结构(八)查找
99
250
110
300
280
类C程序实现: void InsertBST(*&t,key) //在二叉排序树中插入查找关键字key { if(t= = NULL){ t=new BiTree; t->lchild=t->rchild=NULL; t->data=key; return; } if(key<t->data ) InsertBST(t->lchild,key); else InsertBST (t->rchild, key ); } void CreateBiTree(tree,d[ ],n) //n个数据在数组d中,tree为二叉排序树根 { tree=NULL; for(i=0;i<n;i++) InsertBST(tree,d[i]); }
p q
void delete(*&p) { if(p->rchild = = NULL) { q=p; p=p->lchild; delete q; } else if(p->lchild= =NULL) { q=p; p=p->rchild; delete q; } else { q=p; s=p->lchild; while(s->rchild!=NULL) {q=s; s=s->rchild;} p->data=s->data; if(q!=p) q->rchild=s->lchild; else q->lchild=s->lchild; } delete s; }
在xL中选值最大的代替x,该数据按二叉排序树的性质应在 最右边。
f x f s c
2017唐班数据结构-19线性表查找
引理8.1
引理8.1 设算法B对 N 个记录的成功与不成功查找都是等
概率的,则对于成功查找关键词的平均比较次数为 Sn=1+IN / N,对于不成功查找关键词的平均比较次 数为UN=EN / (N+1),其中IN,EN分别为T(1 , N)的内、 外路径长. 则有 SN (11/n) UN 1.
时间复杂性分析
成功查找的平均查找长度:
E(n) i1 n Pi Ci
1
n
i 1
nCi
1 n
i 1
ni
1 n
n(n 1) 2
n 1 0.5n 2
查找失败的查找长度:n+1
顺序查找的期望时间复杂性:O(n)
改进2 自组织表
若表中 P1 P2 … Pn时,E(n)取最小值; 若表中元素之概率是递增的,则E(n)取最大值。 由此可见,表中元素的不同排列(按元素发生的概 率Pi )将影响顺序查找算法的时间复杂性。
例:查找 K96 时二分查找过程(4次比较成功)
1 2 3 4 5 6 7 8 9 10
12 23 26 37 54 60 68 75 82 96
s1
e10
12 23 26 37 54 60 68 75 82 96
s1
i5
e10
12 23 26 37 54 60 68 75 82 96
s6
i8
e10
证明:外路径长比内路径长大2N,故成立
引理8.2 对半查找二叉判定树 T(s , e) 的高度是 log2(es2) .
引理8.3
设T(1 , N) 是 N 个内结点的二叉查找判定树,不 考虑外结点T(1, N)之高度为k,T(1, N)之外结点均 属于k 或 k1层.
数据结构(查找)习题与答案
一、单选题1、对于查找表(13,27,38,49,50 ,65,76,97)采用顺序查找,在等概率情况下查找成功的平均查找长度是()。
A.4.5B.9C.4D.8正确答案:A2、在关键字序列(10,20,30,40,50)中采用折半查找20,依次与()关键字进行了比较。
A.30,10,20B.20C.30,20D.40,20正确答案:A3、在关键字序列(8,12,20,25,33)中,采用二分查找25,关键字之间比较需要()次。
A.2B.1C.3D.4正确答案:A4、对于长度为11的有序表,按折半查找,在等概率情况下查找成功时,其平均查找长度是()。
A.3B.4C.1D.2正确答案:A5、对于长度为11的有序表,按折半查找,在查找失败时,待查找值域表中关键字比较的次数是()。
A.3次或4次B.2次或3次C.4次或5次D.1次或2次正确答案:A6、对于长度为n的有序表,按折半查找,在等概率情况下查找成功平均时间复杂度是()。
A.O(㏒n)B.O(n)C.O(1)D.O(n㏒n)正确答案:A7、索引顺序查找也叫分块查找,其查找过程分为是()个步骤。
A.1B.3C.4D.2正确答案:D8、对于长度为n的关键字序列创建一颗二叉排序树,该树可能的最大高度是()。
A.n+1B.n-1C.㏒nD.n正确答案:D9、对于关键字序列(30,25,40,35,45),按序列次序创建一颗二叉排序树,在等概率情况下查找成功时,其平均查找长度是()。
A.8/3B.11/5C.8D.11正确答案:B10、影响散列查找时间效率的主要因素()。
A.仅与散列表中实际元素个数相关B.仅与散列表长相关C.与散列表长和散列表中实际元素个数均相关D.与散列表长和散列表中实际元素个数均不相关正确答案:C11、一组关键字序列为(27,17,9,19,16,43,53,8,63),用哈希函数H(key)=key MOD 8和链地址法处理冲突,查找关键字43,与散列表中关键字进行了()次比较。
李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(查 找)
4 / 14
圣才电子书
【答案】B
十万种考研考证电子书、题库视频学习平台
【解析】与(8)同理可知答案为 B 项。
(10)在一棵 rn-阶 B 树中,有 k 个孩子结点的非叶子结点恰好包含______关键字。 A.k+1 B.k C.k-1 D.m/2 【答案】C 【解析】按照 B-树的定义可知,有 k 个孩子结点的非叶子节点应该有 k-1 个关键字, 答案为 C 项。
大高度应为 log2 (2047 1) 1 12 ,答案为 B 项。
(13)在以下查找方法中,查找效率与记录个数 n 无直接关系的是______。 A.顺序查找 B.折半查找 C.哈希查找 D.二叉排序树查找 【答案】C 【解析】哈希查找时的平均查找长度不是元素个数 n 的函数,而是装填因子 a 的函数。 因此答案应为 C 项。
(2)在对线性表进行折半查找时,要求线性表必须______。 A.以顺序方式存储 B.以链接方式存储 C.以顺序方式存储,且结点按关键字有序排序 D.以链表方式存储,且结点按关键字有序排序 【答案】C 【解析】对线性表进行折半查找时要求线性表必须以顺序方式存储,且结点按关键字有
1 / 14
圣才电子书 十万种考研考证电子书、题库视频学习平台
(7)一棵二叉排序树是由关键字集合{18,43,27,44,36,39}构建的,其中序遍 历序列是______。
3 / 14
圣才电子书 十万种考研考证电子书、题库视频学习平台
A.树形未定,无法确定 B.18,43,27,77,44,36,39 C.18,27,36,39,43,44,77 D.77,44,43,39,36,27,18 【答案】C 【解析】二叉排序树的中序遍历即为有序递增序列,因此答案应为 C 项。
数据结构课后习题答案第八章
第八章排序(参考答案)本章所用数据结构#define N 待排序记录的个数typedef struct{ int key;ElemType other;}rectype;rectype r[n+1]; // r为结构体数组8.2稳定排序有:直接插入排序、起泡排序、归并排序、基数排序不稳定排序有:希尔排序、直接选择排序、堆排序希尔排序例:49,38,49,90,70,25直接选择排序例:2,2,1堆排序例:1,2,28.3void StlinkedInsertSort(s , n);// 对静态链表s[1..n]进行表插入排序,并调整结果,使表物理上排序{ #define MAXINT 机器最大整数typedef struct{ int key;int next;}rec;rec s[n+1]; // s为结构体数组s[0].key=maxint; s[1].next=0; //头结点和第一个记录组成循环链表i=2; //从第2个元素开始,依次插入有序链表中while (i<=n){q=0; p=s[0].next; // p指向当前最小元素,q是p的前驱while (p!=0 && s[p].key<s[i].key) // 查找插入位置{ q=p; p=s[p].next; }s[i].next=p; s[q].next=i; // 将第个元素链入i++;} // while(i<=n) 静态链表的插入// 以下是重排静态链表,使之物理有序i=1; p=s[0].next;while (i<=n){WHILE (p<i) p=s[p].next;q=s[p].next;if (i!=p){ s[i] s[p]; s[i].next=p;p=q;i++;}}}//算法结束8.4void TwoWayBubbleSort( rectype r[n+1]; int n)// 对r[1..n]进行双向冒泡排序。
数据结构习题课8
索范围减少一列或一行,最多经过m+n次即可找到x .
第二十七页,编辑于星期三:五点 三十五分。
参考答案
算法Find(B,m,n,x) /*在B中查找x,时间复杂度O(m+n)*/ F1[初始化]
i ←0. j ←n. F2[比较B[i,j]与x]
8-23
给定整型数组B[0..m, 0..n]. 已知B中数据在每 一维方向上都按从小到大的次序排列。且整 型变量x在B中存在。试设计一个算法,找出 一对满足B[i,j] = x的i,j值,要求比较次数不超 过m+n.
第二十六页,编辑于星期三:五点 三十五分。
【提示】本题中主要是要确定每次进行比较的对象。其中
IF( pre!=NULL AND data(pre)>data(t) ) THEN(flag FALSE. RETURN.).
pre t.
BST(right(t),pre,flag). ▌
第二十四页,编辑于星期三:五点 三十五分。
C++
bool bst(BinTreeNode<T>* t, BinTreeNode<T>*& pre ) /*t指向根结点;pre指向t的中根前驱,初值NULL*/ {
Zhao
5
Sun
4
Wang
查找成功ASL =(1*5+3*1+7*1)/7 =15/7
3
2
Zhang
1
Chen
0
Liu
第十三页,编辑于星期三:五点 三十五分。
拉链法(假设散列表长度是8,下标从0开始)
下标 7
指针
数据结构图,查找,内排序的练习及答案
数据结构图,查找,内排序的练习及答案数据结构课后练习习题要求:此次练习不要求上交,只是帮助⼤家掌握知识点,便于复习。
第⼋章图⼀.单项选择题(20分)1. 带权有向图G ⽤邻接矩阵A 存储,则Vi 的⼊度等于A 中___D______A. 第i ⾏⾮∞的元素只和B. 第i 列⾮∞的元素之和C. 第i ⾏⾮∞且⾮0的元素之和D. 第i 列⾮∞且⾮0的元素个数2. ⽆向图的邻接矩阵是⼀个___A____A. 对称矩阵B. 零矩阵C. 上三⾓阵D. 对⾓矩阵3. 在⼀个⽆向图中,所有顶点的度之和等于边数的__C____倍A. 1/2B. 1C. 2D. 44. ⼀个有n 个顶点的⽆向图最多有___C____条边。
A. nB. n(n-1)C. n(n-1)/2D.2n5. 对于⼀个具有n 个顶点的⽆向图,若采⽤邻接矩阵表⽰,则该矩阵⼤⼩是__D_____A. nB. 2)1(?nC. n-1D. 2n6. ⼀个有向图G 的邻接表存储如右图所⽰,现按深度优先搜索遍历,从V1出发,所得到的顶点序列是___B_____。
A. 1,2,3,4,5B. 1,2,3,5,4C. 1,2,4,5,3D. 1,2,5,3,47. 对右图所⽰的⽆向图,从顶点V1开始进⾏深度优先遍历,可得到顶点访问序列__A______(提⽰:可先画出邻居表图再遍历)A. 1 2 4 3 5 7 6B. 1 2 4 3 5 6 7C. 1 2 4 5 6 3 7D. 1 2 3 4 5 6 78. 如果从⽆向图的任⼀顶点出发进⾏⼀次深度优先搜索即可访问所有顶点,则该图⼀定是__B_____A. 完全图B. 连通图C.有回路D. ⼀棵树9. 任何⼀个⽆向连通图___B___最⼩⽣成树(提⽰:注意最⼩⽣成树的定义,此题易错)A. 只有⼀棵B. ⼀棵或多棵C. ⼀定有多棵D.可能不存在11. 若图的邻接矩阵中主对⾓线上的元素全是0,其余元素全是1,则可以断定该图⼀定是_D_____。
数据结构练习第八章-查找
数据结构练习第八章查找1.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为< >A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,32.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为〔〕.A.O<1>B. O<log2n>C.O<n>D.O<n2>3.在二叉排序树中插入一个结点的时间复杂度为〔〕.A.O<1>B.O<n>C. O<log2n> D.O<n2>4.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过〔〕.A. log2n+1B. log2n-1C. log2n D. log2<n+1>5.设有序表中有1000个元素,则用二分查找查找元素X最多需要比较〔〕次.A. 25B.10C. 7D. 16.顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为〔〕.A. O<n>B. O<n2>C. O<n1/2>D. O<1og2n>7.设二叉排序树上有n个结点,则在二叉排序树上查找结点的平均时间复杂度为〔〕.A. O<n>B. O<n2>C. O<nlog2n> D. O<1og2n>8.〔〕二叉排序树可以得到一个从小到大的有序序列.A. 先序遍历B.中序遍历C. 后序遍历D. 层次遍历9.设一组初始记录关键字序列为<13,18,24,35,47,50,62,83,90,115,134>,则利用二分法查找关键字90需要比较的关键字个数为〔〕.A. 1B.2C. 3D. 410.设某散列表的长度为100,散列函数H<k>=k % P,则P通常情况下最好选择〔〕.A.99B.97C. 91D. 9311.在二叉排序树中插入一个关键字值的平均时间复杂度为〔〕.A. O<n>B. O<1og2n>C. O<nlog2n>D. O<n2>12.设一个顺序有序表A[1:14]中有14个元素,则采用二分法查找元素A[4]的过程中比较元素的顺序为< >.A. A[1],A[2],A[3],A[4]B.A[1],A[14],A[7],A[4]C.A[7],A[3],A[5],A[4]D. A[7],A[5] ,A[3],A[4]13.设散列表中有m个存储单元,散列函数H<key>= key%p,则p最好选择〔〕.A. 小于等于m的最大奇数B.小于等于m的最大素数C. 小于等于m的最大偶数D. 小于等于m的最大合数14.设顺序表的长度为n,则顺序查找的平均比较次数为〔〕.A. nB. n/2C. <n+1>/2D. <n-1>/215.设有序表中的元素为<13,18,24,35,47,50,62>,则在其中利用二分法查找值为24的元素需要经过〔〕次比较.A. 1B.2C. 3D. 416.设顺序线性表的长度为30,分成5块,每块6个元素,如果采用分块查找,则其平均查找长度为〔 〕.A. 6B.11C. 5 D . 6.517.设有一组初始记录关键字序列为<34,76,45,18,26,54,92>,则由这组记录关键字生成的二叉排序树的深度为〔 〕.A . 4B.5 C. 6 D. 718.二叉排序树中左子树上所有结点的值均〔 〕根结点的值.A .<B.>C.=D.!=19.设有n 个关键字具有相同的Hash 函数值,则用线性探测法把这n 个关键字映射到HASH 表中需要做〔 〕次线性探测.A. n 2B. n<n+1>C. n<n+1>/2 D . n<n-1>/220.用散列函数求元素在散列表中的存储位置时,可能会出现不同的关键字得到相同散列函数值的冲突现象.可用于解决上述问题的是< >A.线性探测法B.除留余数法C.平方取中法D.折叠法21.22.在线性表的散列存储中,若用m 表示散列表的长度,n 表示待散列存储的元素的个数,则装填因子α等于〔 〕.A .n/mB .m/nC .n/<n+m>D .m/<n+m>23.从一棵B_树删除元素的过程中,若最终引起树根结点的合并,则新树高度是〔 〕.A .原树高度加1B .原树高度减1C .原树高度D .不确定24.向二叉搜索树中插入一个元素时,其时间复杂度大致为〔 〕.A.O 〔log 2n 〕 B. O<n>C. O<1> D. 0<nlog 2n>25.5阶B 树中,每个结点最多有〔〕个关键码.A .2B .3C .4D .526.对一棵二叉排序树采用中根遍历进行输出的数据一定是〔 〕A.递增或递减序列B.递减序列C.无序序列D.递增序列27.一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82的结点时,查找成功时的比较次数为〔 〕A.1B.2C.4D.828.若构造一棵具有n 个结点的二叉排序树,最坏的情况下其深度不超过< > A. 2n B. n C. 21n + D. n+1 29.闭散列表中由于散列到同一个地址而引起的"堆积〞现象,是< >A.由同义词之间发生冲突引起的B.由非同义词之间发生冲突引起的C.由同义词之间或非同义词之间发生冲突引起的D.由散列表"溢出〞引起的30.在对查找表的查找过程中,若被查找的数据元素不存在,则把该数据元素插入到集合中.这种方式主要适合于< >A.静态查找表B.动态查找表C.静态查找表与动态查找表D.静态查找表或动态查找表31.设一组记录的关键字key值为{62,50,14,28,19,35,47,56,83},散列函数为H<key>=key mod13,则它的开散列表中散列地址为1的链中的结点个数是〔〕A.1B.2 C.3 D.432.已知一个有序表为〔13,18,24,35,47,50,62,83,90,115,134〕,当二分检索值为90的元素时,检索成功需比较的次数是〔〕A.1B.2C.3D.433.闭散列表中由于散列到同一个地址而引起的"堆积〞现象,是由〔〕A.同义词之间发生冲突引起的B.非同义词之间发生冲突引起的C.同义词与非同义词之间发生冲突引起的D.散列地址"溢出〞引起的34.在最坏的情况下,查找成功时二叉排序树的平均查找长度〔〕A.小于顺序表的平均查找长度B.大于顺序表的平均查找长度C.与顺序表的平均查找长度相同D.无法与顺序表的平均查找长度比较35.闭散列表中由于散列到同一个地址而引起的"堆积〞现象,是由〔〕A.同义词之间发生冲突引起的B.非同义词之间发生冲突引起的C.同义词之间或非同义词之间发生冲突引起的D.散列表"溢出〞引起的36.设有100个元素,用二分法查找时,最大比较次数是〔〕.A.25 B.7C.10 D.137.设有1000个元素,用二分法查找时,最小比较次数为〔〕A.0 B.1C.10 D.50038.在一个长度为n的顺序线性表中顺序查找值为x的元素时,查找成功时的平均查找长度〔即x与元素的平均比较次数,假定查找每个元素的概率都相等〕为< >.A.nB. n/2C. <n+1>/2D. <n-1>/239.对有14个数据元素的有序表R[14]进行折半搜索,搜索到R[3]的关键码等于给定值,此时元素比较顺序依次为〔〕.A.R[0],R[1],R[2],R[3] B.R[0],R[13],R[2],R[3] C.R[6],R[2],R[4],R[3] D.R[6],R[4],R[2],R[3] 40.在一个有N个元素的有序单链表中查找具有给定关键字的结点,平均情况下的时间复杂性为< B >A.O<1>B.O<N>C.0〔N2〕D.O<NlogN>41.对线性表进行二分查找时,要求线性表必须〔B〕A.以顺序方式存储B.以顺序方式存储,且数据元素有序C.以方式存储D.以方式存储,且数据元素有序42.下列二叉排序树中查找效率最高的是< A >A.平衡二叉树B.二叉查找树C.没有左子树的二叉排序树D.没有右子树的二叉排序树43.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法.AA. 分块B. 顺序C. 折半D. 哈希44.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是< C >A.<100,80,90,60,120,110,130>B.<100,120,110,130,80,60,90>C.<100,60,80,90, 20,110,130>D.<100,80,60,90,120,130,110>45.下面关于B和B+树的叙述中,不正确的是<C >A. B树和B+树都是平衡的多叉树.B. B树和B+树都可用于文件的索引结构.C. B树和B+树都能有效地支持顺序检索.D. B树和B+树都能有效地支持随机检索.46.m阶B-树是一棵< B >A. m叉排序树B. m叉平衡排序树C. m-1叉平衡排序树D.m+1叉平衡排序树47.在一棵含有n个关键字的m阶B-树中进行查找,至多读盘< C >次.48.一棵3阶B-树中含有2047个关键字,包括叶子结点层,该树的最大深度为< B >.A, 11 B. 12 C. 13 D. 1449.关于杂凑查找说法不正确的有几个< B > 〔1〕采用链地址法解决冲突时,查找一个元素的时间是相同的〔2〕采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的〔3〕用链地址法解决冲突易引起聚集现象〔4〕再哈希法不易产生聚集A. 1B. 2C. 3D. 450.设哈希表长M=14,哈希函数H<KEY>=KEY MOD 11.表中已有4个结点:ADDR<15>=4, ADDR<38>=5,ADDR<61>=6,ADDR<84>=7,其余地址为空,如用二次探测再散列处理冲突,关键字为49的结点的地址是< D >.A. 8B. 3C. 5D. 951.散列函数有一个共同的性质,即函数值应当以< D >取其值域的每个值.A. 最大概率B. 最小概率C. 平均概率D. 同等概率52.将10个元素散列到100000个单元的哈希表中,则〔C〕产生冲突.A. 一定会B. 一定不会C. 仍可能会53.长度为10的按关键字有序的查找表采用顺序组织方式.若采用折半查找方法,则在等概率情况下,查找失败时的ASL值是〔D〕A.24/10B.24/11C.39/10D.39/1154.在采用拉链法处理冲突所构成的开散列表上查找某一关键字,在查找成功的情况下,所探测的这些位置上的键值〔A〕A.一定都是同义词B.不一定都是同义词C.都相同D.一定都不是同义词55.二叉查找树的查找效率与二叉树的树型有关, 在 <C >时其查找效率最低.A. 结点太多B. 完全二叉树C. 呈单枝树D. 结点太复杂.56.具有12个关键字的有序表,折半查找的平均查找长度〔A〕A. 3.1B. 4C. 2.5D. 557.哈希查找中k个关键字具有同一哈希值,若用线性探测法将这k个关键字对应的记录存入哈希表中,至少要进行< C >次探测.A. k B. k+1 C. k<k+1>/2 D.1+k<k+1>/258.对线性表进行二分查找时,要求线性表必须〔B〕A.以顺序方式存储B.以顺序方式存储,且数据元素有序C.以方式存储D.以方式存储,且数据元素有序59.若查找每个元素的概率相等,则在长度为n 的顺序表上查找任一元素的平均查找长度为< D> .A. nB. n+1C. <n-1>/2D. <n+1>/260.对长度为10 的顺序表进行查找,若查找前面 5 个元素的概率相同,均为1/8 ,查找后面 5 个元素的概率相同,均为3/40 ,则查找任一元素的平均查找长度为< C> .A.5.5B.5C.39/8D.19/461.对长度为3 的顺序表进行查找,若查找第一个元素的概率为1/2 ,查找第二个元素的概率为1/3 ,查找第三个元素的概率为1/6 ,则查找任一元素的平均查找长度为< A> .A .5/3B .2 C. 7/3 D. 4/362.对长度为n 的单链有序表,若查找每个元素的概率相等,则查找任一元素的平均查找长度为< B> .A. n/2 B . <n+1>/2 C. <n-1>/2 D. n/463.对于长度为9 的顺序存储的有序表,若采用二分查找,在等概率情况下的平均查找长度为< A> 的9 分之一.A .20 B. 18 C. 25 D. 2264.对于长度为18 的顺序存储的有序表,若采用二分查找,则查找第15 个元素的查找长度为< B> .A. 3B. 4C. 5D. 665.对于顺序存储的有序表<5,12,20,26,37,42,46,50,64> ,若采用二分查找,则查找元素26 的查找长度为< C> .A .2 B. 3 C. 4 D. 566.对具有n 个元素的有序表采用二分查找,则算法的时间复杂性为< D> .A. O <n>B. O <n 2 >C. O <1>D. O <log 2 n>67.在索引查找中,若用于保存数据元素的主表的长度为n ,它被均分为k 个子表,每个子表的长度均为n/k ,则索引查找的平均查找长度为< D> .A. n+kB. k+n/kC. <k+n/k>/2D. <k+n/k>/2+168.在索引查找中,若用于保存数据元素的主表的长度为n ,它被均分为若干个子表,每个子表的长度均为s ,则索引查找的平均查找长度为< B > .A. <n+s>/2B. <n/s+s>/2+1C. <n+s>/2+1 D . <n/s+s>/269.在索引查找中,若用于保存数据元素的主表的长度为144 ,它被均分为12 子表,每个子表的长度均为12 ,则索引查找的平均查找长度为< A> .A .13 B. 24 C. 12 D. 7970.在索引查找中,若用于保存数据元素的主表的长度为117 ,它被均分为9 子表,则索引查找的平均查找长度为< B> .A. 11B. 12 C .13 D. 971.在一棵深度为h 的具有n 个元素的二叉排序树中,查找所有元素的最长查找长度为< D> .A. nB. log 2 nC. <h+1>/2D.h72.从具有n 个结点的二叉搜索树中查找一个元素时,在平均情况下的时间复杂性大致为< C> .A. O <n>B. O <1>C. O <log 2 n>D. O <n 2 >73.从具有n 个结点的二叉搜索树中查找一个元素时,在最坏情况下的时间复杂性为< A> .A. O <n>B. O <1>C. O <log 2 n>D. O <n 2 >74.向具有n 个结点的二叉搜索树中插入一个元素时,其时间复杂性大致为< B > .A. O <1> B .O <log 2 n > C. O <n> D. O < n log 2n >75.根据n 个元素建立一棵二叉搜索树时,其时间复杂性大致为< D> .A. O <n> B .O <log 2 n > C. O <n 2 > D .O < n log 2n >76.在一棵平衡二叉排序树中,每个结点的平衡因子的取值范围是< A> .A .-1 ~ 1 B. -2 ~ 2 C. 1 ~ 2 D. 0 ~ 177.若根据查找表<23,44,36,48,52,73,64,58> 建立开散列表,采用h<K>=K%13 计算散列地址,则元素64 的散列地址为< C> .A. 4B. 8C. 12D. 1378.若根据查找表<23,44,36,48,52,73,64,58> 建立开散列表,采用h<K>=K%7 计算散列地址,则散列地址等于 3 的元素个数< B> .A.1 B .2 C. 3 D. 479.若根据查找表<23,44,36,48,52,73,64,58> 建立开散列表,采用h<K>=K%7 计算散列地址,则同义词元素个数最多为< C> .A. 1B. 2C. 3D. 480.若根据查找表建立长度为m 的闭散列表,采用线性探测法处理冲突,假定对一个元素第一次计算的散列地址为 d ,则下一次的散列地址为<D> .A. dB. d+1C. <d+1>/mD. <d+1>%m81.若根据查找表建立长度为m 的闭散列表,采用二次探测法处理冲突,假定对一个元素第一次计算的散列地址为 d ,则第四次计算的散列地址为< C> .A. <d+1>%mB. <d-1>%m C . <d+4>%m D. <d-4>%m82.在采用线性探测法处理冲突的闭散列表上,假定装填因子 a 的值为0.5 ,则查找任一元素的平均查找长度为<B> .A. 1B. 1.5C. 2 D .2.583.在采用法处理冲突的开散列表上,假定装填因子 a 的值为 4 ,则查找任一元素的平均查找长度为< A> .A. 3B. 3.5C. 4D. 2.584.在散列查找中,平均查找长度主要与< C> 有关.A.散列表长度B.散列元素的个数C.装填因子D.处理冲突方法85.对顺序表进行二分查找时,要求顺序表必须:A.以顺序方式存储B.以顺序方式存储,且数据元素有序C.以方式存储D.以方式存储,且数据元素有序[解答]B86.下列二叉排序树中查找效率最高的是:A.平衡二叉树B.二叉查找树C.没有左子树的二叉排序树D.没有右子树的二叉排序树[解答]A二、填空题1.假定一个线性表为<12,23,74,55,63,40>,若按Key % 4条件进行划分,使得同一余数的元素成为一个子表,则得到的四个子表分别为_____________、___________、________和___________.〔12,40〕,〔〕,〔74〕,〔23,55,63〕2.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________.增加13. 为了能有效地应用HASH查找技术,必须解决的两个问题是________________和_____________________.构造一个好的HASH函数,确定解决冲突的方法4.设查找表中有100个元素,如果用二分法查找方法查找数据元素X,则最多需要比较________次就可以断定数据元素X是否在查找表中.75.下列算法实现在顺序散列表中查找值为x的关键字,请在下划线处填上正确的语句.struct record{int key; int others;};int hashsqsearch<struct record hashtable[ ],int k>{int i,j; j=i=k % p;while <hashtable[j].key!=k&&hashtable[j].flag!=0>{j=<____> %m; if <i==j> return<-1>;}if <_______________________ > return<j>; else return<-1>;} j+1,hashtable[j].key==k6.下列算法实现在二叉排序树上查找关键值k,请在下划线处填上正确的语句.typedef struct node{int key; struct node *lchild; struct node *rchild;}bitree;bitree *bstsearch<bitree *t, int k>{if <t==0 > return<0>;else while <t!=0>if <t->key==k>_____________;else if <t->key>k> t=t->lchild;else_____________;} return<t>,t=t->rchild7.根据初始关键字序列<19,22,01,38,10>建立的二叉排序树的高度为____________.38.设散列函数H<k>=k mod p,解决冲突的方法为链地址法.要求在下列算法划线处填上正确的语句完成在散列表hashtalbe中查找关键字值等于k的结点,成功时返回指向关键字的指针,不成功时返回标志0.typedef struct node {int key; struct node *next;} lklist;void createlkhash<lklist *hashtable[ ]>{int i,k; lklist *s;for<i=0;i<m;i++>_____________________;for<i=0;i<n;i++>{s=<lklist *>malloc<sizeof<lklist>>; s->key=a[i];k=a[i] % p; s->next=hashtable[k];_______________________;}}hashtable[i]=0,hashtable[k]=s9.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句.struct record{int key; int others;};int bisearch<struct record r[ ], int k>{int low=0,mid,high=n-1;while<low<=high>{________________________________;if<r[mid].key==k> return<mid+1>;else if<____________> high=mid-1;else low=mid+1;}return<0>;} mid=<low+high>/2,r[mid].key>k10.设需要对5个不同的记录关键字进行排序,则至少需要比较_____________次,至多需要比较_____________次.4,1011.设在长度为20的有序表中进行二分查找,则比较一次查找成功的结点数有_________个,比较两次查找成功有结点数有_________个.1,212.设二叉排序树的高度为h,则在该树中查找关键字key 最多需要比较_________次.h13.设散列表的长度为8,散列函数H<k>=k %7,用线性探测法解决冲突,则根据一组初始关键字序列<8,15,16,22,30,32>构造出的散列表的平均查找长度是________.8/314.设一组初始记录关键字序列为<20,12,42,31,18,14,28>,则根据这些记录关键字构造的二叉排序树的平均查找长度是_______________________________.19/715.下面程序段的功能是实现在二叉排序树中插入一个新结点,请在下划线处填上正确的内容.typedef struct node{int data;struct node *lchild;struct node *rchild;}bitree;void bstinsert<bitree *&t,int k>{if<t==0>{____________________________;t->data=k;t->lchild=t->rchild=0;} else if <t->data>k> bstinsert<t->lchild,k>;else__________________________;} t=<bitree *>malloc<sizeof<bitree>>,bstinsert<t->rchild,k>16.解决散列表冲突的两种方法是________________和__________________.开放定址法,链地址法17.在一棵m 阶B_树上,每个非树根结点的关键字数目最少为_______个,最多为_____个,其子树数目最少为______,最多为____.⎡⎤12/-m 、m-1 、⎡⎤2/m 、 m18.从一棵二叉搜索树中查找一个元素时,若元素的值等于根结点的值,则表明_______,若元素的值小于根结点的值,则继续向________查找,若元素的大于根结点的值,则继续向________查找.查找成功、左子树、右子树19.对于二分查找所对应的判定树,它既是一棵_____,又是一棵__________.二叉搜索树、理想平衡树20.二叉搜索树的中序遍历得到的结点序列为________. 有序序列21.从有序表〔12,18,30,43,56,78,82,95〕中依次二分查找43和56元素时,其查找长度分别为___________和__________.1 , 322.假定对长度n=144的线性表进行索引查找,并假定每个子表的长度均为n,则进行索引查找的平均查找长度为__________,时间复杂度为___________.13, O<n>23.一棵B-树中的所有叶子结点均处在_____________上.同一层24.每次从无序表中顺序取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做_______排序;每次从无序表中挑选出一个最大或最小元素,把它交换到有序表中的一端,此种排序方法叫做_________排序.插入选择25.对于线性表〔18,25,63,50,41,32,90,66〕进行散列存储时,若选用H〔K〕=K%11作为散列函数,则散列地址为0的元素有______个,散列地址为3的元素有______个,散列地址为8的元素有______个.1 1 226.在一个具有n个结点的单链表中查找值为m的某结点,若查找成功,则需平均比较的结点数为____<n+1>/2________.27.在一棵二叉排序树上按_____中序_______遍历得到的结点序列是一个有序序列.28.实现二分查找的存储结构仅限于顺序存储结构,且其中元素排列必须是____有序的.29.设顺序表的表长为n,且查找每个元素的概率相等,则采用顺序查找法查找表中任一元素,在查找成功时的平均查找长度为___<n+1>/2_______.30.在索引顺序表上的查找分两个阶段:一是查找_____索引表_____,二是查找块.31.一棵平衡二叉树中任一结点的平衡因子只可能是__-1,0,1_____.n>_____.32.二分查找的时间复杂度为__O<log233.查找表的数据结构有别于线性表、树型结构等,其逻辑结构为____集合______.34.长度为L的顺序表,采用设置岗哨方式顺序查找,若查找不成功,其查找长度为__L+1_______.35.在开散列表上查找某元素时,通常分两步进行,首先必须计算该键值的散列地址,然后在地址指针所指_________同义词子表_______中查找该结点.36.对二叉排序树进行__中序______遍历,可得到排好序的递增结点序列. 37.采用折半查找方法进行查找的数据序列应为____顺序存储____且___有序_____.38.查找表的逻辑组织结构实际上是____集合____________结构.39.对于具有n个元素的数据序列,采用顺序查找法,其平均查找长度为____<n+1>/2______.40.快速排序算法在最差的情况下其时间复杂度是.O<n2>41.在线性表的________存储中,对每一个元素只能采用顺序查找.链式42.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为________________.〔n+1〕/243.以顺序查找方法从长度为n的线性表中查找一个元素时,平均查找长度为________,时间复杂度为________.<n+1>/2、O<n>44.以二分查找方法从长度为n的线性有序表中查找一个元素时,平均查找长度小于等于________,时间复杂度为________.O<log2n>45.以二分查找方法从长度为12的有序表中查找一个元素时,平均查找长度为________.37/1246.以二分查找方法查找一个线性表时,此线性表必须是________存储的________表.顺序、有序47.从有序表<12,18,30,43,56,78,82,95>中依次二分查找43和56元素时,其查找长度分别为________和________.1、348.对于二分查找所对应的判定树,它既是一棵_______,又是一棵________.二叉搜索树、理想平衡树49.假定对长度n=50的有序表进行二分查找,则对应的判定树高度为________,判定树中前5层的结点数为________,最后一层的结点数为________.6、31、19 50.在索引表中,每个索引项至少包含有________域和________域这两项.索引、开始地址51.假定一个线性表为<12,23,74,55,63,40,82,36>,若按Key % 3条件进行划分,使得同一余数的元素成为一个子表,则得到的三个子表分别为________、________和________.<12,63,36>、<55,40,82>、<23,74>52.假定一个线性表为<〞abcd〞,〞baabd〞,〞bcef〞,〞cfg〞,〞ahij〞,〞bkwte〞,〞ccdt〞,〞aayb〞>,若按照字符串的第一个字母进行划分,使得同一个字母被划分在一个子表中,则得到的a,b,c三个子表的长度分别为________、________和________.3、3、253.在线性表的________存储中,无法查找到一个元素的前驱或后继元素.散列54.在线性表的________存储中,对每一个元素只能采用顺序查找.55.假定对线性表<38,25,74,52,48>进行散列存储,采用H<K>=K % 7作为散列函数,若分别采用线性探查法和法处理冲突,则对各自散列表进行查找的平均查找长度分别为_______和________.2、7/556.假定要对长度n=100的线性表进行散列存储,并采用法处理冲突,则对于长度m=20的散列表,每个散列地址的单链表的长度平均为________.557.在线性表的散列存储中,处理冲突有________和________两种方法.开放定址、58.对于线性表<18,25,63,50,42,32,90>进行散列存储时,若选用H<K>=K % 9作为散列函数,则散列地址为0的元素有________个,散列地址为5的元素有________个.3、259.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为_________,整个堆排序过程的时间复杂度为________________.O〔log2n〕、O<nlog2n>;60.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为__ __次;当使用监视哨时,若查找失败,则比较关键字的次数为__ __.n n+161.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是.哈希查找62.在有序表A[1..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次为__________.6,9,11,1263.己知有序表为<12,18,24,35,47,50,62,83,90,115,134>当用二分法查找90时,需__________次查找成功,47时__________成功,查100时,需__________次才能确定不成功.2,4,364.平衡二叉树又称_________,其定义是________.AVL树<高度平衡树,高度平衡的二叉排序树>,或为空二叉树,或二叉树中任意结点左子树高度与右子树高度差的绝对值小于等于1.65.在哈希函数H〔key〕=key%p中,p值最好取_________.小于等于表长的最大素数或不包含小于20的质因子的合数66.有一个2000项的表,欲采用等分区间顺序查找方法进行查找,则每块的理想长度是__<1>___,分成__<2>___块最为理想,平均查找长度是__<3>___.<1>45 <2>45 <3>46<块内顺序查找>67.假定有k个关键字互为同义词,若用线性探测再散列法把这k个关键字存入散列表中,至少要进行__________次探测.k<k+1>/268.查找是非数值程序设计的一个重要技术问题,基本上分成__<1>__查找,__<2>__查找和__<3>__查找.处理哈希冲突的方法有__<4>__、__<5>__、__<6>__和__<7>__.<1>顺序表 <2>树表 <3>哈希表 <4>开放定址方法<1><5>链地址方法 <6>再哈希 <7>建立公共溢出区69.在含有n个结点的二叉排序树中查找一个关键字,进行关键字比较次数最大值是.n70.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有个结点.2k-171.假定查找有序表A[1..12]中每个元素的概率相等,则进行二分查找时的平均查找长度为__________ 37/1272.动态查找表和静态查找表的重要区别在于前者包含有__________和__________运算,而后者不包含这两种运算.插入删除73.对于具有144 个记录的文件,若采用分块查找法,且每块长度为8,则平均查找长度为__________. 1474.以顺序查找方法从长度为n 的顺序表或单链表中查找一个元素时,平均查找长度为________ ,时间复杂性为________ .<n+1>/2 O<n>75.假定一个顺序表的长度为40 ,并假定查找每个元素的概率都相同,则在查找成功情况下的平均查找长度________ ,在查找不成功情况下的平均查找长度________ .20.5 4176.以二分查找方法从长度为50 的有序表中查找一个元素时,其查找长度不超过________ .677.以二分查找方法在一个查找表上进行查找时,该查找表必须组织成________ 存储的________ 表.顺序有序78.从有序表<12,18,30,43,56,78,82,95> 中分别二分查找43 和56 元素时,其查找长度分别为________ 和________ .1 379.二分查找所对应的判定树,既是一棵_______ ,又是一棵________ .二叉排序。
第八章查找习题_数据结构
3.一个无序序列可以通过构造一棵_ _ 为对无序序列进行排序的过程。
_ _树而变成一个有序序列,构造树的过程即
4. 哈希表是通过将查找码按选定的__
__和 __
__,把结点按查找码转
换为地址进行存储的线性表。哈希方法的关键是_
__和 __
__。一个好的
哈希函数其转换地址应尽可能__
__,而且函数运算应尽可能__
6. 略 7. 略
四、算法设计题 1. int Search(rectype r[ ],int n,keytype k)
//在 n 个关键字从小到大排列的顺序表中,查找关键字为 k 的结点。 {r[n+1].key=MAXINT;//在高端设置监视哨
i=1; while(r[i].key<k)i++; if (r[n+1].key==k) return (i%(n+1)); else return (0) }//算法 search 结束 查找过程的判定树是单枝树,限于篇幅不再画出。本题中虽然表按关键字有序,但进行 顺序查找,查找成功的平均查找长度亦为(n+1)/2。
三、应用题 1.哈希方法的平均查找路长主要取决于负载因子(表中实有元素数与表长之比),它反映了 哈希表的装满程度,该值一般取 0.65~0.9。
散列表存储中解决碰撞的基本方法: ① 开放定址法 形成地址序列的公式是:Hi=(H(key)+di)% m,其中 m 是表长, di 是增量。根据 di 取法不同,又分为三种: a.di =1,2,…,m-1 称为线性探测再散列,其特点是逐个探测表空间,只要散列表 中有空闲空间,就可解决碰撞,缺点是容易造成“聚集”,即不是同义词的关键字争夺同一 散列地址。 b.di =12,-12,22,-22,… ,k2(k≤m/2) 称为二次探测再散列,它减少了聚集, 但不容易探测到全部表空间,只有当表长为形如 4j+3(j 为整数)的素数时才有可能。 c.di =伪随机数序列,称为随机探测再散列。 ② 再散列法 Hi=RHi(key) i=1,2,…,k,是不同的散列函数,即在同义词产生 碰撞时,用另一散列函数计算散列地址,直到解决碰撞。该方法不易产生“聚集”,但增加 了计算时间。 ③ 链地址法 将关键字为同义词的记录存储在同一链表中,散列表地址区间用
数据结构C语言版第八章 查找
第八章查找重点难点要求理解"查找表"的结构特点以及各种表示方法的适用性;熟练掌握顺序查找和折半查找的方法;熟悉描述折半查找过程的判定树的构造方法;熟练掌握二叉排序树的构造和查找方法;理解二叉平衡树的构造过程;理解B-和B+树的特点、基本操作和二者的区别。
熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的实质性的差别;掌握各种不同查找方法之间的区别和各自的适用情况,能按定义计算各种查找方法在等概率情况下查找成功时的平均查找长度。
典型例题1.若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找,试在下述两种情况下分别讨论两者在等概率时的平均查找长度:(1)查找不成功,即表中无关键字等于给定值K的记录;(2)查找成功,即表中有关键字等于给定值K的记录。
【解】查找不成功时,需进行n+1次比较才能确定查找失败。
因此平均查找长度为n+1,这时有序表和无序表是一样的。
查找成功时,平均查找长度为(n+1)/2,有序表和无序表也是一样的。
因为顺序查找与表的初始序列状态无关。
2.画出对长度为18的有序的顺序表进行二分查找的判定树,并指出在等概率时查找成功的平均查找长度,以及查找失败时所需的最多的关键字比较次数。
【解】等概率情况下,查找成功的平均查找长度为:ASL=(1+2*2+3*4+4*8+5*3)/18=3.556查找失败时,最多的关键字比较次树不超过判定树的深度,此处为5.3.为什么有序的单链表不能进行折半查找?【解】因为链表无法进行随机访问,如果要访问链表的中间结点,就必须先从头结点开始进行依次访问,这就要浪费很多时间,还不如进行顺序查找,而且,用链存储结构将无法判定二分的过程是否结束,因此无法用链表实现二分查找。
4.设二叉排序树中关键字互不相同,则其中最小元必无左孩子,最大元必无右孩子。
此命题是否正确?最小元和最大元一定是叶子吗?一个新结点总是插在二叉排序树的某叶子上吗?【解】此命题正确。
数据结构 第八章 查找表
第八章查找表一、选择题1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。
A. (n-1)/2 B. n/2 C. (n+1)/2 D. n2. 对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( )A.(N+1)/2 B. N/2 C. N D. [(1+N)*N ]/23.顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为((1)),二分法查找只适用于查找顺序存储的有序表,平均比较次数为((2))。
在此假定N为线性表中结点数,且每次查找都是成功的。
A.N+1B.2log2NC.logND.N/2E.Nlog2NF.N24. 下面关于二分查找的叙述正确的是 ( )A. 表必须有序,表可以顺序方式存储,也可以链表方式存储C. 表必须有序,而且只能从小到大排列B. 表必须有序且表中数据必须是整型,实型或字符型D. 表必须有序,且表只能以顺序方式存储5. 对线性表进行二分查找时,要求线性表必须()A.以顺序方式存储B.以顺序方式存储,且数据元素有序C.以链接方式存储D.以链接方式存储,且数据元素有序6.适用于折半查找的表的存储方式及元素排列要求为( )A.链接方式存储,元素无序 B.链接方式存储,元素有序C.顺序方式存储,元素无序 D.顺序方式存储,元素有序7. 用二分(对半)查找表的元素的速度比用顺序法( )A.必然快 B. 必然慢 C. 相等 D. 不能确定8.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度( )A.必定快 B.不一定 C. 在大部分情况下要快 D. 取决于表递增还是递减9. 具有12个关键字的有序表,折半查找的平均查找长度()A. 3.1B. 4C. 2.5D. 510. 折半查找的时间复杂性为()A. O(n2)B. O(n)C. O(nlog n)D. O(log n)11.当采用分快查找时,数据的组织方式为 ( )A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同12. 二叉查找树的查找效率与二叉树的( (1))有关, 在 ((2))时其查找效率最低(1): A. 高度 B. 结点的多少 C. 树型 D. 结点的位置(2): A. 结点太多 B. 完全二叉树 C. 呈单枝树 D. 结点太复杂。
数据结构查找
块记录数可以少于s个),即:
且表分块有序,即第i(1≤i≤b-1)块所有记录的key小于第i+1块中记录的key, 但块内记录可以无序。
2.建立索引 每块对应一索引项:
kmax link
其中kmax为该块内记录的最大key;link为该块第一记录的序号(或指针)。
int len; //当前表长,表空时len=0
}sqlist; 若说明:sqlist r,则(r.data[1],……,r.data[r.len])为记录表(R1……Rn),
Ri.key为r.data[i].key, r.data[0]称为监视哨,为算法设计方便所设。
8.2.1 顺序查找算法
顺序查找(Sequential Search)是最简单的一种查找方法。
第八章 查找
本章的“查找”(Searching)及第九章的“排序”(Sorting)是建立在数 据结构上的两个重要运算。查找(或检索)是在给定信息集上寻找特定信息 元素的过程。据统计,一些计算机、特别是商用计算机,其CPU处理时间 约25%~75%花费在查找或排序上。所以对查找和排序问题的处理,有时 直接影响到计算机的工作效率。
mid= (1 5) / 2 =3。因k>r.data[3].key=18,若20存在,一定落在“18”的
右半区间。令:low=mid+1。
mid= (4 5) / 2 =4。因k=r.data[4].key=20,查找成功, 返回mid=4。
折半查找
再看查找失败的情况,设要查找k=85的记录。 序号: 1 2 3 4 5 6 7 8 9 10 11 12 (n=12)
数据结构c语言版第三版习题解答
数据结构c语言版第三版习题解答数据结构是计算机科学中非常重要的一门学科,它研究如何在计算机中存储和组织数据,以便有效地进行检索和操作。
数据结构的知识对于编写高效的程序和解决复杂的问题至关重要。
在学习和理解数据结构的过程中,解决习题是一种非常有效的方法。
本文将为读者提供《数据结构C语言版(第三版)》习题的解答。
1. 第一章:绪论第一章主要介绍了数据结构的基本概念和内容,包括算法和数据结构的概念、抽象数据类型(ADT)以及算法的评价等。
习题解答中,我们可以通过分析和讨论的方式对这些概念进行加深理解。
2. 第二章:算法分析第二章主要介绍了算法的基本概念和分析方法,包括时间复杂度和空间复杂度的计算方法。
习题解答中,我们可以通过具体的算法实例来计算其时间和空间复杂度,加深对算法分析的理解。
3. 第三章:线性表第三章主要介绍了线性表的概念和实现,包括顺序表和链表两种实现方式。
习题解答中,我们可以通过编写代码实现线性表的基本操作,并分析其时间和空间复杂度。
4. 第四章:栈和队列第四章主要介绍了栈和队列的概念和实现,包括顺序栈、链栈、顺序队列和链队列四种实现方式。
习题解答中,我们可以通过编写代码实现栈和队列的基本操作,并分析其时间和空间复杂度。
5. 第五章:串第五章主要介绍了串的概念和实现,包括顺序串和链串两种实现方式。
习题解答中,我们可以通过编写代码实现串的基本操作,并分析其时间和空间复杂度。
6. 第六章:树第六章主要介绍了树的概念和实现,包括二叉树、哈夫曼树和赫夫曼编码等内容。
习题解答中,我们可以通过编写代码实现树的基本操作,并分析其时间和空间复杂度。
7. 第七章:图第七章主要介绍了图的基本概念和实现,包括图的表示方法和图的遍历算法等。
习题解答中,我们可以通过编写代码实现图的基本操作,并分析其时间和空间复杂度。
8. 第八章:查找第八章主要介绍了查找算法的基本概念和实现,包括顺序查找、二分查找、哈希查找等内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题八查找一、单项选择题1.顺序查找法适合于存储结构为()的线性表。
A.散列存储 B. 顺序存储或链式存储C. 压缩存储D. 索引存储2.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。
A. (n-1)/2 B. n/2 C. (n+1)/2 D. n3.适用于折半查找的表的存储方式及元素排列要求为( )A.链接方式存储,元素无序 B.链接方式存储,元素有序C.顺序方式存储,元素无序 D.顺序方式存储,元素有序4.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度( )A.必定快 B.不一定 C. 在大部分情况下要快 D. 取决于表递增还是递减5.当采用分块查找时,数据的组织方式为 ( )A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同6.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。
这种说法()。
A.正确 B. 错误7. 二叉查找树的查找效率与二叉树的((1) )有关, 在 ((2) )时其查找效率最低。
(1): A. 高度 B. 结点的多少 C. 树型 D. 结点的位置(2): A. 结点太多 B. 完全二叉树 C. 呈单枝树 D. 结点太复杂。
8.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用( )查找法。
A. 分快查找B. 顺序查找C. 折半查找D. 基于属性9.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( )。
A.(100,80, 90, 60, 120,110,130) B.(100,120,110,130,80, 60, 90)C.(100,60, 80, 90, 120,110,130)D. (100,80, 60, 90, 120,130,110) 10.下图所示的4棵二叉树,( )是平衡二叉树。
(A)(B)(C)(D)11.散列表的平均查找长度()。
A.与处理冲突方法有关而与表的长度无关B.与处理冲突方法无关而与表的长度有关C.与处理冲突方法有关且与表的长度有关D.与处理冲突方法无关且与表的长度无关12. 设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散列函数为H(key)=key MOD 13,散列地址为1的链中有()个记录。
A.1 B. 2 C. 3 D. 413. 关于杂凑查找说法不正确的有几个( )(1)采用链地址法解决冲突时,查找一个元素的时间是相同的(2)采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的(3)用链地址法解决冲突易引起聚集现象(4)再哈希法不易产生聚集A. 1B. 2C. 3D. 414. 设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( )A.8 B.3 C.5 D.915. 将10个元素散列到个单元的哈希表中,则()产生冲突。
A. 一定会B. 一定不会C. 仍可能会二、填空题1. 顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为__ __次;当使用监视哨时,若查找失败,则比较关键字的次数为__ __。
2. 在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为____.3.一个无序序列可以通过构造一棵_ _ _ _树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。
4. 哈希表是通过将查找码按选定的__ __和 __ __,把结点按查找码转换为地址进行存储的线性表。
哈希方法的关键是_ __和 __ __。
一个好的哈希函数其转换地址应尽可能__ __,而且函数运算应尽可能__ __。
5. 平衡二叉树又称__________,其定义是_____ _____。
6. 在哈希函数H(key)=key%p中,p值最好取__________。
7.假定有k个关键字互为同义词,若用线性探测再散列法把这k个关键字存入散列表中,至少要进行__________次探测。
8. __________法构造的哈希函数肯定不会发生冲突。
9. 动态查找表和静态查找表的重要区别在于前者包含有__________和__________运算,而后者不包含这两种运算。
10.在散列存储中,装填因子α的值越大,则__ __;α的值越小,则__ __。
11. 已知N元整型数组a存放N个学生的成绩,已按由大到小排序,以下算法是用对分(折半)查找方法统计成绩大于或等于X分的学生人数,请填空使之完善。
#define N /*学生人数*/int uprx(int a[N],int x ) /*函数返回大于等于X分的学生人数*/{ int head=1,mid,rear=N;do {mid=(head+rear)/2;if(x<=a[mid]) __(1) __ else __(2)_ _;}while(__(3)_ _);if (a[head]<x) return head-1;return head; }三、应用题1.HASH方法的平均查找路长决定于什么?是否与结点个数N有关?处理冲突的方法主要有哪些?2. 设有一组关键字{9,01,23,14,55,20,84,27},采用哈希函数:H(key)=key mod 7 ,表长为10,用开放地址法的二次探测再散列方法Hi=(H(key)+di) mod 10(di=12,22,32,…,)解决冲突。
要求:对该关键字序列构造哈希表,并计算查找成功的平均查找长度。
3. 选取哈希函数H(key)=key mod 7,用链地址法解决冲突。
试在0-6的散列地址空间内对关键字序列{31,23,17,27,19,11,13,91,61,41}构造哈希表,并计算在等概率下成功查找的平均查找长度。
4. 输入一个正整数序列(53,17,12,66,58,70,87,25,56,60),试完成下列各题。
(1)按次序构造一棵二叉排序树BS。
(2)依此二叉排序树,如何得到一个从大到小的有序序列?(3)画出在此二叉排序树中删除“66”后的树结构。
5. 直接在二叉排序树中查找关键字K与在中序遍历输出的有序序列中查找关键字K,其效率是否相同?输入关键字有序序列来构造一棵二叉排序树,然后对此树进行查找,其效率如何?为什么?6. 一棵二叉排序树结构如下,各结点的值从小到大依次为1-9,请标出各结点的值。
7. 假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:(1).画出描述折半查找过程的判定树;(2).若查找元素54,需依次与那些元素比较?(3).若查找元素90,需依次与那些元素比较?(4).假定每个元素的查找概率相等,求查找成功时的平均查找长度。
四、算法设计题1. 设记录R1,R2,…,Rn按关键字值从小到大顺序存储在数组r[1..n]中,在r[n+1]处设立一个监督哨,其关键字值为+∞; 试写一查找给定关键字k 的算法;并画出此查找过程的判定树,求出在等概率情况下查找成功时的平均查找长度。
2.试编写算法求出指定结点在给定的二叉排序树中所在的层数。
3. 写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。
设删除结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。
第九章查找一、单项选择题1.B2.C3.D4.C5.B6.B7. C C8.A9.C10.B11.A12. D13. B14. D15. C二、填空题1. n n+12. 43.二叉排序4. (1)哈希函数(2)解决冲突的方法 (3)选择好的哈希函数 (4)处理冲突的方法 (5)均匀(6)简单5. AVL树(高度平衡树,高度平衡的二叉排序树)或为空二叉树,或二叉树中任意结点左子树高度与右子树高度差的绝对值小于等于1。
6. 小于等于表长的最大素数或不包含小于20的质因子的合数7.k(k+1)/28. 直接定址法9. 插入删除10.存取元素时发生冲突的可能性就越大存取元素时发生冲突的可能性就越小11.(1)rear=mid-1 (2)head=mid+1 (3)head>rear三、应用题1.哈希方法的平均查找路长主要取决于负载因子(表中实有元素数与表长之比),它反映了哈希表的装满程度,该值一般取0.65~0.9。
散列表存储中解决碰撞的基本方法:①开放定址法形成地址序列的公式是:H i=(H(key)+d i)% m,其中m是表长,d i是增量。
根据d i取法不同,又分为三种:a.d i =1,2,…,m-1 称为线性探测再散列,其特点是逐个探测表空间,只要散列表中有空闲空间,就可解决碰撞,缺点是容易造成“聚集”,即不是同义词的关键字争夺同一散列地址。
b.d i =12,-12,22,-22,…, k2(k≤m/2)称为二次探测再散列,它减少了聚集,但不容易探测到全部表空间,只有当表长为形如4j+3(j为整数)的素数时才有可能。
c.d i =伪随机数序列,称为随机探测再散列。
②再散列法 H i=RH i(key) i=1,2,…,k,是不同的散列函数,即在同义词产生碰撞时,用另一散列函数计算散列地址,直到解决碰撞。
该方法不易产生“聚集”,但增加了计算时间。
③链地址法将关键字为同义词的记录存储在同一链表中,散列表地址区间用H[0..m-1]表示,分量初始值为空指针。
凡散列地址为i(0≤i≤m-1)的记录均插在以H[i]为头指针的链表中。
这种解决方法中数据元素个数不受表长限制,插入和删除操作方便,但增加了指针的空间开销。
这种散列表常称为开散列表,而①中的散列表称闭散列表,含义是元素个数受表长限制。
④建立公共溢出区设H[0..m-1]为基本表,凡关键字为同义词的记录,都填入溢出区O[0..m-1]。
2.succ以关键字27为例:H(27)=27%7=6(冲突) H1=(6+1)%10=7(冲突)H2=(6+22)%10=0(冲突) H3=(6+33)%10=5 所以比较了4次。
3. 表略ASL succ =15/104. 略5. 在二叉排序树上查找关键字K,走了一条从根结点至多到叶子的路径,时间复杂度是O(logn),而在中序遍历输出的序列中查找关键字K,时间复杂度是O(n)。