数据结构 第八章 查找表 下载本文

29. 已知记录关键字集合为(53,17,19,61,98,75,79,63,46,49)要求散列到地址区间(100,101,102,103,104,105,106,107,108,109)内,若产生冲突用开型寻址法的线性探测法解决。要求写出选用的散列函数;形成的散列表;计算出查找成功时平均查找长度与查找不成功的平均查找长度。(设等概率情况) 30.高度为h的m阶B树至少有多少个结点?

31. 满二叉检索树符合B树定义吗?B树的插入和删除算法适用于满二叉检索树吗?为何? 32. 在一棵B+树上一般可进行那两种方式的查找运算? 44. 含9个叶子结点的3阶B-树中至少有多少个非叶子结点?含10个叶子结点的3阶B-树中至多有多少个非叶子结点? 33. 直接在二叉排序树中查找关键字K与在中序遍历输出的有序序列中查找关键字K,其效率是否相同?输入关键字有序序列来构造一棵二叉排序树,然后对此树进行查找,其效率如何?为什么?

34. 一棵二叉排序树结构如下,各结点的值从小到大依次为1-9,请标出各结点的值。 35. 用序列(46,88,45,39,70,58,101,10,66,34)建立一个排序二叉树,画出该树,并求在等概率情况下查找成功的平均查找长度.

36. 依次输入表(30,15,28,20,24,10,12,68,35,50,46,55)中的元素,生成一棵二叉排序树

(1) 试画出生成之后的二叉排序树; (2) 对该二叉排序树作中序遍历,试写出遍历序列;

(3) 假定每个元素的查找概率相等,试计算该二叉排序树的平均查找长度。

37. 用关键字1,2,3,4的四个结点(1)能构造出几种不同的二叉排序树?其中(2)最优查找树有几种?(3)AVL树有几种?(4)完全二叉树有几种?试画出这些二叉排序树。

类似本题的另外叙述有:

(1)设有关键字A、B、C和D,依照不同的输入顺序,共可能组成多少不同的二叉排序树。请画出其中高度较小的6种。

38. 一棵具有m层的AVL树至少有多少个结点,最多有多少个结点?

39. 设T是一棵高度平衡树(又称平衡树),给定关键词K,如果在T中查找K失败,且查找路径上的任一结点的平衡系数皆为零,试回答用高度平衡树插入算法在T中插入关键词为K的新结点后,树T的高度是否一定增加?并回答为什么。

40. 在数轴上有N个彼此相临不交的区间,每个区间下界上界都是整数。N个区间顺序为

1-N。要查找给定的X落入的区间号,您认为应怎样组织数据结构,选择什么方法最快,简述原因。

41. 有一个长度为12的有序表,按对半查找法对该表进行查找,在表内各元素等概率情况

下,查找成功所需的平均比较次数是多少?

42. 若对一个线性表进行折半查找,该线性表应满足什么条件? 43. 长度为255的有序表采用分块查找,块的大小应取多少?

44. 用分块查找法,有2000项的表分成多少块最理想?每块的理想长度是多少?若每块长度为25 ,平均查找长度是多少?

45. 设有n个值不同的元素存于顺序结构中,试问:你能否用比(2n-3)少的比较次数选出这n个元素中的最大值和最小值?若能,请说明是如何实现的;在最坏情况下,至少要进行多少次比较。

46. 对有14个元素的有序表A[1?14]作折半查找,当比较到A[4]时算法结束。被比较元素除A[4]外,还有哪几个?

47. 设有五个数据do,for,if,repeat,while,它们排在一个有序表中,其查找概率分别

为p1 =0.2, p2=0.15,p3=0.1,p4=0.03,p5=0.01。而查找它们之间不存在数据的概率分别为q0=0.2,q1=0.15,q2=0.1,q3=0.03,q4=0.02,q5=0.01。

(1) 试画出对该有序表采用顺序查找时的判定树和采用折半查找时的判定树。

(2) 分别计算顺序查找时的查找成功和不成功的平均查找长度,以及折半查找时的查找成功和不成功的平均查找长度。

(3) 判定是顺序查找好?还是折半查找好?

48. 顺序检索,二分检索,哈希(散列)检索的时间分别为O(n),O(log2n),O(1)。既然有了高效的检索方法,为什么低效的方法还不放弃?

五、算法设计题

1.请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink-rlink法存储。

类似本题的另外叙述有:

(1)试写一个判别给定二叉树是否为二叉排序树的算法。

(2)某二叉树采用链接存储,其结点结构是:(lc,data,rc)。 lc和rc分别是指向左子树根和右子树根的指针域。data为结点数据域。试写出判断该二叉树是否为二叉排序树的算法(不许另设空间,但可以设一些辅助指针)。设二叉排序树左子树每个结点值<根结点值,右子树每个结点的值≥根结点的值。二叉树是递归定义的。按此定义写出判断某二叉树是否为二叉排序树的算法。

(3) 编写判定给定的二叉树是否是二叉排序树的函数。

2.某个任务的数据模型可以抽象为给定的K个集合:S1,S2,?,Sk。其中Si(1<=i<=k)中的元素个数不定。在处理数据过程中将会涉及到元素的查找和新元素的插入两种操作,查找和插入时用一个二元组(i,x)来规定一个元素,i是集合的序号,x是元素值。设计一种恰当的数据结构来存储这k个集合的元素,并能高效的实现所要求的查找和插入操作。

(1)借助Pascal的数据类型来构造和描述你所选定的数据结构,并且说明选择的理由;

(2)若一组数据模型为S1={10.2, 1.7, 4.8, 16.2 }, S2={1.7, 8.4, 0.5 }, S3={4.8, 4.2,

3.6, 2.7, 5.1, 3.9 }, 待插入的元素二元组为(2, 11.2 )和(1, 5.3 ), 按你的设计思想画出插入元素前后的数据结构状态。

3. 写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。用类PASCAL(或C)语言将上述算法写为过程形式。

4. 已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p为fp的左孩子,试编写算法,删除p所指结点。

5.二叉排序树采用二叉链表存储。写一个算法,删除结点值是X的结点。要求删除该结点后,此树仍然是一棵二叉排序树,并且高度没有增长(注:可不考虑被删除的结点是根的情况)。

6. 设记录R1,R2,?,Rn按关键字值从小到大顺序存储在数组r[1..n]中,在r[n+1]处设立一个监督哨,其关键字值为+∞; 试写一查找给定关键字k 的算法;并画出此查找过程的判定树,求出在等概率情况下查找成功时的平均查找长度。

7.试编写算法,在根结点指针为t的m-阶B树上查找关键字k,返回记录(pt,i,tag).若查找成功,则特征位tag=1,等于k的关键字即为指针pt所指结点中的第i个关键字;若查找不成功,则特征位tag=0,等于k的关键字应插入到指针pt所指结点中第i个和第i+1个关键字之间。简化B-树存储结构如下所示:

type mblink=↑mbnode mbnode=record keynum:integer; parent:mblink;

key:array[1..m] of keytp {关键字} ptr:array [0..m] of mblink end;

result=record pt:mblink; i:integer; tag:(0..1) end;

(注:所用语言C, PASCAL等都可使用编制算法。若算法不用类PASCAL描述,要给出相应语言的结构描述。题目中给出的结构说明可供参考,也可自行给出)

8. 元素集合已存入整型数组A[1..n]中,试写出依次取A中各值A[i](1<=i<=n)构造一棵二叉排序树T的非递归算法:CSBT(T,A)

9.给出折半查找的递归算法,并给出算法时间复杂度性分析。

类似本题的另外叙述有:

(1)写出折半查找的算法,并要求它返回整型值i,当查找成功时,返回查找位置,查找不成功时返回0。

10.请用类C或用类PASCAL语言编写算法:键树,又称数字查找树。它是一棵度为>=2的树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。编写一个在键(TIRE)树T上查找关键字等于给定值KEY的记录的算法。若查找成功,返回指向该记录的指针;否则返回空指针。

11.写出从哈希表中删除关键字为K的一个记录的算法,设哈希函数为H,解决冲突的方法为链地址法。

12.用PASCAL或C编写一用链接表(LINKED LIST)解决冲突的哈希表插入函数。 13.在用除余法作为散列函数、线性探测解决冲突的散列表中,写一删除关键字的算法,要求将所有可以前移的元素前移去填充被删除的空位,以保证探测序列不致于断裂。 14.设排序二叉树中结点的结构为下述三个域构成:

data: 给出结点数据的值;left: 给出本结点的左儿子结点的地址;right: 给出本结点的右儿子结点的地址

设data 域为正整数,该二叉树树根结点地址为T。现给出一个正整数x。请编写非递归程序,实现将data域的值小于等于x的结点全部删除掉。

15.已知二叉树T的结点形式为(llink, data,count,rlink,),在树中查找值为X的结点,若找到,则记数(count)加1;否则,作为一个新结点插入树中,插入后仍为二叉排序树,写出其非递归算法。

16.假设一棵平衡二叉树的每个结点都标明了平衡因子b,试设计一个算法,求平衡二叉树的高度。

17.设从键盘输入一个整数的序列:n,a1,a2,?,an,其中n表示连续输入整数的个数。 (1)试编写一程序按整数值建立一个二叉排序树(单考生做)。

(2)在(1)基础上将此二叉树上的各整数按降序写入一磁盘文件中(统考生做)。 18.设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。

19.在单链表中,每个结点含有5个正整型的数据元素若(最后一个结点的数据元素不满5个,以值0充),试编写一算法查找值为n(n>0)的数据元素所在的结点指针以及在该结点中的序号,若链表中不存在该数据元素则返回空指针。

20.编写对有序表进行顺序查找的算法,并画出对有序表进行顺序查找的判定树。假设每次查找时的给定值为随机值,又查找成功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期望值。