文档库 最新最全的文档下载
当前位置:文档库 › 数据结构 第八章 查找表

数据结构 第八章 查找表

数据结构 第八章 查找表
数据结构 第八章 查找表

第八章查找表

一、选择题

1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。

A. (n-1)/2 B. n/2 C. (n+1)/2 D. n

2. 对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( )

A.(N+1)/2 B. N/2 C. N D. [(1+N)*N ]/2

3.顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为((1)),二分法查找只适用于查找顺序存储的有序表,平均比较次数为((2))。在此假定N为线性表中结点数,且每次查找都是成功的。

A.N+1

B.2log2N

C.logN

D.N/2

E.Nlog2N

F.N2

4. 下面关于二分查找的叙述正确的是 ( )

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.1

B. 4

C. 2.5

D. 5

10. 折半查找的时间复杂性为()

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. 结点太复杂。

13. 要进行顺序查找,则线性表(1);要进行折半查询,则线性表(2);若表中元素个数为n,则顺序查找的平均比较次数为(3);折半查找的平均比较次数为(4)。

(1)(2):A. 必须以顺序方式存储; B. 必须以链式方式存储;

C. 既可以以顺序方式存储,也可以链式方式存储;

D. 必须以顺序方式存储,且数据已按递增或递减顺序排好;

E. 必须以链式方式存储,且数据已按递增或递减的次序排好。

(3)(4):A.n B.n/2 C.n*n D.n*n/2 E.log2n

F.nlog2n

G.(n+1)/2

H.log2(n+1)

14.在等概率情况下,线性表的顺序查找的平均查找长度ASL为( (1) ),有序表的折半查找的ASL为( (2) ),对静态树表,在最坏情况下,ASL为( (3) ),而当它是一棵平衡树时,ASL 为 ( (4) ),在平衡树上删除一个结点后可以通过旋转使其平衡,在最坏情况下需( (5) )次旋转。供选择的答案:

(1)(2)(3)(4)(5): A. O(1) B. O( log2n )

C. O((log2n)2)

D.O(nlog2n)

E. O(n)

15. 对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是((1)) ,对于查找成功,他们的平均查找长度是((2))供选择的答案:

A. 相同的

B.不同的

16.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用( )查找法。

A. 分快查找

B. 顺序查找

C. 折半查找

D. 基于属性

17. 既希望较快的查找又便于线性表动态变化的查找方法是 ( )

A.顺序查找 B. 折半查找 C. 索引顺序查找 D. 哈希法查找

18.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( ) 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)

19. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0右孩子的平衡因子为1,则应作( ) 型调整以使其平衡。

A. LL

B. LR

C. RL

D. RR

20.下列关于m阶B-树的说法错误的是( )

A.根结点至多有m棵子树 B.所有叶子都在同一层次上

C. 非叶结点至少有m/2 (m为偶数)或m/2+1(m为奇数)棵子树

D. 根结点中的数据是有序的

21. 下面关于m阶B树说法正确的是( )

①每个结点至少有两棵非空子树;②树中每个结点至多有m一1个关键字;

③所有叶子在同一层上; ④当插入一个数据项引起B树结点分裂后,树长高一层。

A.①②③ B. ②③ C. ②③④ D. ③

22. 下面关于B和B+树的叙述中,不正确的是( )

A. B树和B+树都是平衡的多叉树。

B. B树和B+树都可用于文件的索引结构。

C. B树和B+树都能有效地支持顺序检索。

D. B树和B+树都能有效地支持随机检索。

23. m阶B-树是一棵( )

A. m叉排序树

B. m叉平衡排序树

C. m-1叉平衡排序树

D. m+1叉平衡排序树

24. 设有一组记录的关键字为{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. 4

25. 下面关于哈希(Hash,杂凑)查找的说法正确的是( )

A.哈希函数构造的越复杂越好,因为这样随机性好,冲突小

B.除留余数法是所有哈希函数中最好的

C.不存在特别好与坏的哈希函数,要视情况而定

D.若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单的将该元素删去即可

26. 若采用链地址法构造散列表,散列函数为H(key)=key MOD 17,则需 ((1)) 个链表。这些链的链首指针构成一个指针数组,数组的下标范围为 ((2))

(1) A.17 B. 13 C. 16 D. 任意

(2) A.0至17 B. 1至17 C. 0至16 D. 1至16

27. 关于杂凑查找说法不正确的有几个( )

(1)采用链地址法解决冲突时,查找一个元素的时间是相同的

(2)采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的

(3)用链地址法解决冲突易引起聚集现象

(4)再哈希法不易产生聚集

A. 1

B. 2

C. 3

D. 4

28. 设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( )

A.8 B.3 C.5 D.9

29. 假定有k个关键字互为同义词,若用线性探测法把这k个关键字存入散列表中,至少要进行多少次探测?( )

A.k-1次 B. k次 C. k+1次 D. k(k+1)/2次

30. 哈希查找中k个关键字具有同一哈希值,若用线性探测法将这k个关键字对应的记录存入哈希表中,至少要进行( )次探测。

A. k B. k+1 C. k(k+1)/2 D.1+k(k+1)/2

31. 散列函数有一个共同的性质,即函数值应当以( )取其值域的每个值。

A. 最大概率

B. 最小概率

C. 平均概率

D. 同等概率

32. 散列表的地址区间为0-17,散列函数为H(K)=K mod 17。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。

(1)元素59存放在散列表中的地址是()。

A. 8 B. 9 C. 10 D. 11

(2)存放元素59需要搜索的次数是()。

A. 2 B. 3 C. 4 D. 5

33. 将10个元素散列到100000个单元的哈希表中,则()产生冲突。

A. 一定会

B. 一定不会

C. 仍可能会

二、判断题

1.采用线性探测法处理散列时的冲突,当从哈希表删除一个记录时,不应将这个记录的所在位置置空,因为这会影响以后的查找。

2.在散列检索中,“比较”操作一般也是不可避免的。

3.散列函数越复杂越好,因为这样随机性好,冲突概率小.

4.哈希函数的选取平方取中法最好。

5.Hash表的平均查找长度与处理冲突的方法无关。

6.负载因子 (装填因子)是散列表的一个重要参数,它反映散列表的装满程度。

7. 散列法的平均检索长度不随表中结点数目的增加而增加,而是随负载因子的增大而增大。

8. 哈希表的结点中只包含数据元素自身的信息,不包含任何指针。

9. 若散列表的负载因子α<1,则可避免碰撞的产生。

10.查找相同结点的效率折半查找总比顺序查找高。

11.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。

12. 在索引顺序表中,实现分块查找,在等概率查找情况下,其平均查找长度不仅与表中元素个数有关,而且与每块中元素个数有关。

13. 顺序查找法适用于存储结构为顺序或链接存储的线性表。

14. 折半查找法的查找速度一定比顺序查找法快。

15. 就平均查找长度而言,分块查找最小,折半查找次之,顺序查找最大。

16.对无序表用二分法查找比顺序查找快。

17.对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找成功,它们的平均查找长度是相同的,而对于查找失败,它们的平均查找长度是不同的。18.任一查找树(二叉分类树)的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间.

19.最佳二叉树是AVL树(平衡二叉树)。

20.在查找树(二叉树排序树)中插入一个新结点,总是插入到叶结点下面。

21.完全二叉树肯定是平衡二叉树。

22.对一棵二叉排序树按前序方法遍历得出的结点序列是从小到大的序列。

23.二叉树中除叶结点外, 任一结点X,其左子树根结点的值小于该结点(X)的值;其右子树根结点的值≥该结点(X)的值,则此二叉树一定是二叉排序树。

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

25. N个结点的二叉排序树有多种,其中树高最小的二叉排序树是最佳的。

26. 在任意一棵非空二叉排序树中,删除某结点后又将其插入,则所得二排序叉树与原二排序叉树相同。

27. 设T为一棵平衡树,在其中插入一个结点n,然后立即删除该结点后得到T1,则T与T1必定相同。

28. 将线性表中的结点信息组织成平衡的二叉树,其优点之一是总能保证任意检索长度均为log2n量级(n为线形表中的结点数目)。

29. B-树中所有结点的平衡因子都为零。

30. 虽然信息项序列的顺序不一样,但依次生成的二叉排序树却是一样的。

31. 在9阶B-树中,除叶子以外的任意结点的分支数介于5和9之间。

32.B-树的插入算法中,通过结点的向上“分裂”,代替了专门的平衡调整。

33.在平衡二叉树中,向某个平衡因子不为零的结点的树中插入一新结点,必引起平衡旋转。34.二叉排序树删除一个结点后,仍是二叉排序树。

35.B+树既能索引查找也能顺序查找。

三、填空题

1. 顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为__ __次;当使

用监视哨时,若查找失败,则比较关键字的次数为__ __。

2. 在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为____.

3.在有序表A[1..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次

为__________。

4. 在有序表A[1..20]中,按二分查找方法进行查找,查找长度为5的元素个数是__________

5. 高度为4的3阶b-树中,最多有__________个关键字。

6. 在有序表A[1…20]中,按二分查找方法进行查找,查找长度为4的元素的下标从小到大

依次是__________

7. 给定一组数据{6,2,7,10,3,12}以它构造一棵哈夫曼树,则树高为__________,带

权路径长度WPL的值为__________。

8. 在一棵m阶B-树中,若在某结点中插入一个新关键字而引起该结点分裂,则此结点中原有

的关键字的个数是__________;若在某结点中删除一个关键字而导致结点合并,则该结点

中原有的关键字的个数是__________。

9. 己知有序表为(12,18,24,35,47,50,62,83,90,115,134)当用二分法查找90时,需

__________次查找成功,47时__________成功,查100时,需__________次才能确定不

成功。

10.哈希表是通过将查找码按选定的__(1)__和 __(2)__,把结点按查找码转换为地址进行

存储的线性表。哈希方法的关键是_(3)__和 __(4)__。一个好的哈希函数其转换地址应尽

可能__(5)__,而且函数运算应尽可能__(6)__。

11. 平衡二叉树又称__________,其定义是__________。

12. 在哈希函数H(key)=key%p中,p值最好取__________。

13. 对于长度为255的表,采用分块查找,每块的最佳长度为__________。

14. 在n个记录的有序顺序表中进行折半查找,最大比较次数是__________。

15.有一个2000项的表,欲采用等分区间顺序查找方法进行查找,则每块的理想长度是

__(1)___,分成__(2)___块最为理想,平均查找长度是__(3)___。

16.假定有k个关键字互为同义词,若用线性探测再散列法把这k个关键字存入散列表中,至少要进行__________次探测。

17. 分块检索中,若索引表和各块内均用顺序查找,则有900个元素的线性表分成

__________块最好:若分成25块,其平均查找长度为__________。

18. 执行顺序查找时,储存方式可以是__(1)__,二分法查找时,要求线性表__(2)__,分块查找时要求线性表 __(3)__,而散列表的查找,要求线性表的存储方式是 __(4)__。

19. 如果按关键码值递增的顺序依次将关键码值插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为__________。

20. 如果关键码按值排序,而后用二分法依次检索这些关键码,并把检索中遇到的在二叉树

中没有出现的关键码依次插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为__________。

21. 平衡因子的定义是__________

22. 查找是非数值程序设计的一个重要技术问题,基本上分成__(1)__查找,__(2)__查找和

__(3)__查找。处理哈希冲突的方法有__(4)__、__(5)__、__(6)__和__(7)__。

23. 具有N个关键字的B树的查找路径长度不会大于__________。

24. 在一棵有N 个结点的非平衡二叉树中进行查找,平均时间复杂度的上限(即最坏情况平均时间复杂度)为________ 。

25. 假设有n个关键字,它们具有相同的Hash函数值,用线性探测方法解决冲突,把这n 个关键字散列到大小为n的地址空间中,共计需要做__________次插入和探测操作。

26. 高度为8的平衡二叉树的结点数至少有__________个。

27. 高度为5(除叶子层之外)的三阶B-树至少有__________个结点。

28. 假定查找有序表A[1..12]中每个元素的概率相等,则进行二分查找时的平均查找长度为__________

29. 可以唯一的标识一个记录的关键字称为__________。

30. 已知二叉排序树的左右子树均不为空,则__________上所有结点的值均小于它的根结点值,__________上所有结点的值均大于它的根结点的值。

31. 动态查找表和静态查找表的重要区别在于前者包含有__________和__________运算,而后者不包含这两种运算。

32. 对于具有144 个记录的文件,若采用分块查找法,且每块长度为8,则平均查找长度为__________.

33. 127阶B-树中每个结点最多有__(1)__个关键字;除根结点外所有非终端结点至少有

__(2)__棵子树;65阶B+树中除根结点外所有结点至少有__(3)__个关键字;最多有__(4)__棵子树;

34. 若静态查找表的类型定义如下:

TYPE rectype=RECORD key:keytype;……; END;

ordlisttp=ARRAY[1..n] OF rectype;

请完成以下二分查找的算法:

FUNC binsrch(r:ordlisttp;k:keytype):integer;

BEGIN low:=1;hig:=n;suc:=false;

WHILE ___(1)___ AND NOT(suc)DO

[ mid:=__(2)____;

CASE

k>r[mid].key:low:=mid+1;

k=r[mid].key:suc:=true;

k

END;]

IF suc THEN __(3)__ ELSE __(4)__

END;

35. 顺序查找

FUNC seq(a,n,k):integer;

BEGIN I:=1; A[n+1]= __(1)____;

WHILE a[I]<>k DO I:=I+1;

IF __(2)___ THEN return(I) ELSE return(0);

END;

36. 已知N元整型数组a存放N个学生的成绩,已按由大到小排序,以下算法是用对分(折半)查找方法统计成绩大于或等于X分的学生人数,请填空使之完善。(C语言,PASCAL 语言的考生不填)

#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]

return head; }

37. 假设root是一棵给定的非空查找树,对于下面给出的子程序,当执行注释中给出的调用语句时,就可以实现如下的操作:在非空查找树root中查找值为k 的结点;若值为k 的结点在树中,且是一个叶子结点,则删除此叶子结点,同时置success

为“真”;若值为k的结点不在树中,或者虽然在树中,但不是叶子结点,则不进行删除,仅置success为“假”。应注意到非空查找树只包含一个结点情况,此时树中的唯一结点,既是根结点,也是叶子结点。

#include

typedef struct node {

int key;

struct node *left, *right;

} node;

node *root; int k,success;

void del_leaf(node **t, int k, int *sn)

{ node *p, *pf; p=*t; *sn=0;

while(_(1)_&&!*sn)

if (k==p->key) *sn =1;

else { _(2)_;

if (kkey ) p=p->left; else p=p->right; }

if (*sn && p->left==NULL && p->right==null)

{ if (_(3)_ )

if (pf->left ==p ) pf ->left=null; else pf->right=null;

else _(4)_ ;

free(p); }

else *sn=0;

/*call form :del_leaf( &root, k, &success);*/

四、应用题

1.名词解释:

哈希表

同义词:叙述B-树定义,主要用途是什么?它和B+树的主要差异是什么?

B-树

平衡二叉树(AVL树)?

平衡因子平均查找长度(ASL)

trie树。

2. 回答问题并填空

(1)散列表存储的基本思想是什么?

(2)散列表存储中解决碰撞的基本方法有哪些?其基本思想是什么?

(3)用分离的同义词子表解决碰撞和用结合的同义词表解决碰撞属于哪种基本方法?他们各有何特点?

(4)用线性探查法解决碰撞时,如何处理被删除的结点?为什么?

(5)散列法的平均检索长度不随( )的增加而增加,而是随( )的增大而增加。

3. 如何衡量hash函数的优劣?简要叙述hash表技术中的冲突概念,并指出三种解决冲

突的方法。

4.HASH方法的平均查找路长决定于什么?是否与结点个数N有关?处理冲突的方法主要有哪些?

5.在采用线性探测法处理冲突的散列表中,所有同义词在表中是否一定相邻?

6. 设有一组关键字{9,01,23,14,55,20,84,27},采用哈希函数:H(key)=key mod 7 ,表长为10,用开放地址法的二次探测再散列方法Hi=(H(key)+di) mod 10(di=12,22,32,…,)解决冲突。要求:对该关键字序列构造哈希表,并计算查找成功的平均查找长度。

7.对下面的关键字集{30,15,21,40,25,26,36,37}若查找表的装填因子为0.8,采用线性探测再散列方法解决冲突,做:

(1)设计哈希函数;(2)画出哈希表;

(3)计算查找成功和查找失败的平均查找长度;(4)写出将哈希表中某个数据元素删除的算法;

8.设哈希表a 、b分别用向量a[0..9],b[0..9]表示,哈希函数均为H(key)=key MOD 7,处理冲突使用开放定址法,Hi=[H(key)+Di]MOD 10,在哈希表a中Di用线性探测再散列法,在哈希表b中Di用二次探测再散列法,试将关键字{19,24, 10,17,15,38,18,40}分别填入哈希表a,b中,并分别计算出它们的平均查找长度ASL。

9.采用哈希函数H(k)=3*k mod 13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51

(1)构造哈希表(画示意图);(2)装填因子;等概率下(3)成功的和(4)不成功的平均查找长度。

10. 常用的构造哈希函数的方法有哪些?若在哈希表中删除一个记录,应如何操作?为什么?已知一组关键字为(19,14,23,01,68,20,84,27,55,11,10,79)按哈希函数 H(Key)=Key MOD 13和线性探测再散列处理冲突的方法在地址空间A[0..15]中构造哈希表。

11. 设哈希函数H(k)=3 K mod 11,散列地址空间为0~10,对关键字序列

(32,13,49,24,38,21,4,12)按下述两种解决冲突的方法构造哈希表(1)线性探测再散列(2)链地址法,并分别求出等概率下查找成功时和查找失败时的平均查找长度ASLsucc和ASLunsucc。

12. 使用散列函数hashf(x)=x mod 11,把一个整数值转换成散列表下标,现要把数据:

1,13,12,34,38,33,27,22插入到散列表中。(1)使用线性探查再散列法来构造散列表。(2)使用链地址法构造散列表。

针对这两种情况,确定其装填因子,查找成功所需的平均探查次数,以及查找不成功所需的平均探查次数。

13. 已知长度为12 的表(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)

(1)试按表中元素的顺序依次插入一棵初始为空的分类二叉树,试画出插入完成之后

的分类二叉树并计算其在等概率查找情况下,查找成功的平均查找长度。

(2)试用以下两种方法构造两个Hash表,Hash函数H(K)=[i/2],其中i为关键字K

中第一个字母在字母表中的序号,[x]表示取整数。

a. 用线性探测开放定址法处理冲突(散列地址空间为0~16);

b. 用链地址法处理,然后分别求出这两个Hash表在等概率查找情况下,查找成功

的平均查找长度。

14. 设散列函数H(k)=K mod 7,散列表的地址空间为0-6,对关键字序列

{32,13,49,18,22,38,21}按链地址法处理冲突的办法构造哈希表,并指出查找各关键字要进行几次比较。

15. 选取哈希函数H(key)=key mod 7,用链地址法解决冲突。试在0-6的散列地址空间内对关键字序列{31,23,17,27,19,11,13,91,61,41}构造哈希表,并计算在等概率下成功查找的平均查找长度。

16. 设散列函数为H(K)=K MOD 11,解决冲突的方法为链接法,试将下列关键字集合

{35,67,42,21,29,86,95,47,50,36,91}依次插入到散列表中(画出散列表的示意图)。并计算平均查找长度ASL。

17. 设输入的关键字序列为:22,41,53,33,46,30,13,01,67, Hash函数为:H(key)=key MOD 11。HASH表长度为11。试用线性探测法解决冲突,将各关键字按输入顺序填入Hash表中。

18. 设哈希(Hash)表的地址范围为0~17,哈希函数为:H (K)=K MOD 16, K为关键字,用线性探测再散列法处理冲突,输入关键字序列: (10,24,32,17,31,30,46,47,40,63,49)造出哈希表,试回答下列问题:

(1) 画出哈希表示意图; (2) 若查找关键字63,需要依次与哪些关键字比较?

(3) 若查找关键字60,需要依次与哪些关键字比较?

(4) 假定每个关键字的查找概率相等,求查找成功时的平均查找长度。

19. 试为下列关键字设计哈希表,要求所设计的表在查找成功时的平均查找长度不超过

2.0。并请验证你造的哈希表的实际平均查找长度是否满足要求。

(CHA,CAI,LAN,WEN,LONG,ZHAO,WU,LIU,CHEN,LI,WANG,CAO,YUN,CHANG,YANG)

20. 设a,b,c,d,e五个字符的编码分别为1,2,3,4,5,并设标识符依以下次序出现:

ac,bd,aa,be,ab,ad,cd,bc,ae,ce。要求用哈希(Hash)方法将它们存入具有10个位置的表中。

(1)将上述关键字(标识符)构造一个哈希函数,使得发生冲突尽可能地少;(2)线性探测再散列法解决冲突。

写出上述各关键字在表中位置。

21. 对以下关键字序列建立哈希表:(SUN,MON,TUE,WED,THU,FRI,SAT),哈希函数为H(K)

=(关键字中第一个字母在字母表中的序号)MOD 7,用线性探测法处理冲突,求构造一个装

填因子为0.7的哈希表;并分别计算出在等概率情况下查找成功与不成功的平均查找长度。22. 设散列表为HT [0..12],即表的大小为m=13。现采用双散列法解决冲突。散列函数和再

散列函数分别为:

H0(key)=key % 13; 注:%是求余数运算(=mod)

H i=(H i-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)。

(1)试画出插入这8个关键码后的散列表;(2)计算搜索成功的平均搜索长度ASL。

23. 设一个散列表含hashsize=13个表项,其下标从0到12,采用线性探查法解决冲突。

请按以下要求,将关键码{10,100,32,45,58,126,3,29,200,400,0}散列到表中。

(1)散列函数采用除留余数法,用%hashsize(取余运算)将各关键码映像到表中,请指

出每一个产生冲突的关键码可能产生多少次冲突。

(2)散列函数采用先将关键码各位数字折叠相加,再用%hashsize将相加的结果映像到

表中的办法。请指出每一个产生冲突的关键字码可能产生多少次冲突。

24. 已知一组关键字为(26,36,41,38,44,15,68,12,06,51,25),用链地址法解决冲突。假

设装填因子a=0.75,散列函数的形式为H(K)=K MOD P,回答下列问题:

(1)构造出散列函数;(2)计算出等概率情况下查找成功的平均查找长度;)

(3)计算出等概率情况下查找失败的平均查找长度;

25. 在B-树和B+树中查找关键字时,有什么不同?

26. 简要叙述B树(有些教材中称为B-树)与B+树的区别?

27. 包括n个关键码的m阶B-树在一次检索中最多涉及多少个结点?(要求写出推导过程。)

28. 给定关键码序列(26,25,20,33,21,24,45,204,42,38,29,31),要用散列法进行存储,规定负载因子α=0.6。

(1)请给出除余法的散列函数。

(2)用开地址线性探测法解决碰撞,请画出插入所有的关键码后得到的散列表,并指出发生碰撞的次数。

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

21.已知二叉排序树采用二叉链表存储结构,根结点的指针为T,链结点的结构为(lchild,data,rchild),其中lchild、rchild分别指向该结点左、右孩子的指针(当孩子结点不存在时,相应指针域为null),data域存放结点的数据信息。请写出递归算法,从小到大输出二叉排序树中所有数据值>=x的结点的数据。要求先找到第一个满足条件的结点后再依次输出其他满足条件的结点。

22. 设二叉排序树的存储结构为:

TYPE tree=^node;

node=RECORD

key: keytype;

size:int;

lchild, rchild, parents: tree;

END;

一个结点x^的size域的值是以该结点为根的子树中结点的总数(包括x^本身)。例如,下图中x所指结点的sixe值为4。设树高为h,试写一时间为O(h)的算法

Rank(T:tree;x:^node)返回x所指结点在二叉排序树T的中序序列里的排序序号,即:求

x^结点是根为T的二叉排序树中第几个最小元素。例如,下图x所指结点是树T中第11个最小元素。(提示:你可利用size值和双亲指针parents)

23.已知某哈希表HT的装填因子小于1,哈希函数H(key)为关键字的第一个字母在字母表中的序号。

(1)处理冲突的方法为线性探测开放地址法。编写一个按第一个字母的顺序输出哈希表中所有关键字的程序。

(2)处理冲突的方法为链地址法。编写一个计算在等概率情况下查找不成功的平均查找长度的算法。注意,此算法中规定不能用公式直接求解计算。

24.有一个100*100的稀疏矩阵,其中1%的元素为非零元素,现要求用哈希表作存储结构。

(1)请你设计一个哈希表

(2)请写一个对你所设计的哈希表中给定行值和列值存取矩阵元素的算法;并对你的算法所需时间和用一维数组(每个分量存放一个非零元素的行值,列值,和元素值)作存储结构时存取元素的算法(注:此算法不需要写出,仅需说明存取的方法和所用时间)进行比较。

25.将一组数据元素按哈希函数H(key)散列到哈希表HT(0:m)中,用线性探测法处理冲突(H(key)+1、H(key)+2、…、H(key)-1),假设空单元用EMPTY表示,删除操作是将哈希表中结点标志位从INUSE标记为DELETED,试写出该散列表的查找、插入和删除三个基本操作算法。

26. 设给定关键字输入序列为(100,90,120,60,78,35,42,31,15)用散列法散列0-10的地址区间。要求设计一合理的散列函数;冲突时用链表法解决,写出散列算法,并构造出散列表,在等概率查找情况下查找成功的平均查找长度是多少?

类似本题的另外叙述有:

(1) 已知输入关键字序列为(100,90,120,60,78,35,42,31,15)地址区间为0~11。设计一个哈希表函数把上述关键字散到0~11中,画出散列表(冲突用线性探测法);写出查找算法,计算在等概率情况下查找成功的平均查找长度。

27.已知顺序表中有m个记录,表中记录不依关键字有序排列,编写算法为该顺序表建立一个有序的索引表,索引表中的每一项含记录的关键字和该记录在顺序表中的序号,要求算法的时间复杂度在最好的情况下能达到)O(m).

参考答案:

一.选择题

二.判断题

部分答案解释如下。

4.不能说哪种哈希函数的选取方法最好,各种选取方法有自己的适用范围。

8.哈希表的结点中可以包括指针,指向其元素。

11.单链表不能使用折半查找方法。

20.按插入后中序遍历是递增序列的原则,若某结点只有右子树,而插入元素的关键字小于该结点的关键字,则会插入到该结点的左侧,成为其左孩子。这种插入就不是插入到叶子下面。

21.从平衡因子定义看,完全二叉树任一结点的平衡因子的绝对值确实是小于等于1。但是,平衡二叉树本质上是二叉排序树,完全二叉树不一定是排序树。故不能说完全二叉树是平衡二叉树。

23.某结点的左子树根结点不一定是它的中序前驱,其右子树根结点也不一定是它的中序后继。

24.在等概率下,查找成功时的平均查找长度相同,查找失败时的平均查找长度不相同。26.只有被删除结点是叶子结点时命题才正确。

三.填空题

1.n n+1 2.4 3.6,9,11,12 4.5

5.26(第4层是叶子结点,每个结点两个关键字) 6.1,3,6,8,11,13,16,19 7.5,96 8.m-1,「m/2?-1 9.2,4,3

10.(1)哈希函数(2)解决冲突的方法 (3)选择好的哈希函数 (4)处理冲突的方法 (5)均匀(6)简单

11.AVL树(高度平衡树,高度平衡的二叉排序树),或为空二叉树,或二叉树中任意结点左子树高度与右子树高度差的绝对值小于等于1。

12.小于等于表长的最大素数或不包含小于20的质因子的合数

13.16

14.?㏒2n」+1

15.(1)45 (2)45 (3)46(块内顺序查找)

16.k(k+1)/2

17.30,31.5(块内顺序查找)

18.(1)顺序存储或链式存储 (2)顺序存储且有序 (3)块内顺序存储,块间有序 (4) 散列存储

19.(n+1)/2 20.(n+1)/n*log2(n+1)-1

21.结点的左子树的高度减去结点的右子树的高度

22.(1)顺序表(2)树表(3)哈希表(4)开放定址方法(5)链地址方法(6)再哈希(7)建立公共溢出区

23.直接定址法 24.O(N) 25.n(n+1)/2 26.54 27.31

28.37/12 29.主关键字 30.左子树右子树

31.插入删除 32.14 33.(1)126 (2)64 (3)33 (4)65 34.(1)low<=high (2) (low+hig) DIV 2 (3) binsrch:=mid (4)binsrch:=0 35.(1) k (2) Irear 37.(1)p!=null (2)pf=p (3)p!=*t (4)*t=null

四.应用题

1.概念是基本知识的主要部分,要牢固掌握。目的是引起重视,解答略。

2.(1)散列表存储的基本思想是用关键字的值决定数据元素的存储地址

(2)散列表存储中解决碰撞的基本方法:

①开放定址法形成地址序列的公式是: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]。

(3)用分离的同义词表和结合的同义词表解决碰撞均属于链地址法。链地址向量空间中的每个元素不是简单的地址,而是关键字和指针两个域,散列地址为i(0≤i≤m-1)的第一个关键字存储在地址空间向量第i个分量的“关键字”域。前者的指针域是动态指针,指向

《数据结构》习题汇编08_第八章_查找_试题

数据结构课程(本科)第七章试题 一、单项选择题 1.若搜索每一个元素的概率相等,则在长度为n的顺序表上搜索到表中任一元素的平均搜索长度为 ()。 A. n B. n+1 C. (n-1)/2 D. (n+1)/2 2.对长度为10的顺序表进行搜索,若搜索前面5个元素的概率相同,均为1/8,搜索后面5个元素的概 率相同,均为3/40,则搜索到表中任一元素的平均搜索长度为()。 A. 5.5 B. 5 C. 39/8 D. 19/4 3.对长度为3的顺序表进行搜索,若搜索第一个元素的概率为1/2,搜索第二个元素的概率为1/3,搜索 第三个元素的概率为1/6,则搜索到表中任一元素的平均搜索长度为()。 A. 5/3 B. 2 C. 7/3 D. 4/3 4.对长度为n的有序单链表,若搜索每个元素的概率相等,则顺序搜索到表中任一元素的平均搜索长度 为()。 A. n/2 B. (n+1)/2 C. (n-1)/2 D. n/4 5.对于长度为n的有序顺序表,若采用折半搜索,则对所有元素的搜索长度中最大的为()的值 的向上取整。 A. log2(n+1) B. log2n C. n/2 D. (n+1)/2 6.对于长度为n的有序顺序表,若采用折半搜索,则对所有元素的搜索长度中最大的为()的值 的向下取整加一。 A. log2(n+1) B. log2n C. n/2 D. (n+1)/2 7.对于长度为9的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长度为() 的值除以9。 A. 20 B. 18 C. 25 D. 22 8.对于长度为18的有序顺序表,若采用折半搜索,则搜索第15个元素的搜索长度为()。 A. 3 B. 4 C. 5 D. 6 9.对具有n个元素的有序顺序表进行折半搜索,则搜索任一元素的时间复杂度为()。 A. O(n) B. O(n2) C. O(1) D. O(log2n) 10.在一棵高度为h的具有n个元素的二叉搜索树中,搜索所有元素的搜索长度中最大的为()。 A. n B. log2n C. (h+1)/2 D. h+1 11.从具有n个结点的二叉搜索树中搜索一个元素时,在等概率情况下进行成功搜索的时间复杂度大致为 ()。 A. O(n) B. O(1) C. O(log2n) D. O(n2)

数据结构第八章习题及答案

习题八查找 一、单项选择题 1.顺序查找法适合于存储结构为()的线性表。 A.散列存储 B. 顺序存储或链式存储 C. 压缩存储 D. 索引存储 2.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。 A. (n-1)/2 B. n/2 C. (n+1)/2 D. n 3.适用于折半查找的表的存储方式及元素排列要求为( ) 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的链中有()个

数据结构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.设二叉排序树中关键字互不相同,则其中最小元必无左孩子,最大元必无右孩子。此命题是否正确?最小元和最大元一定是叶子吗?一个新结点总是插在二叉排序树的某叶子上吗? 【解】此命题正确。假设最小元有左孩子,则根据二叉排序树性质,此左孩子应比最小元更小,如此一来就产生矛盾了,因此最小元不可能有左孩子,对于最大元也是这个道理。 但最大元和最小元不一定是叶子,它也可以是根、内部结点(分支结点)等,这得根据插入结点时的次序而定。 新结点总是作为叶子插入在二叉排序树中的。 5.在一棵m阶的B-树中,当将一关键字插入某结点而引起该结点的分裂时,此结点原有多少个关键字?若删去某结点中的一个关键字,而导致结点合并时,该结点中原有几个关键字? 【解】在一棵m阶的B-树中,若由于一关键字的插入某结点而引起该结点的分裂时,则该结点原有m-1个关键字。 若删去某结点中一个关键字而导致结点合并时,该结点中原有┌m/2┐-1个关键字。6.设散列表长度为11,散列函数h(x)=x%11,给定的关键字序列为:1,13,13,34,38,33,27,22.试画出分别用拉链法和线性探查法解决冲突时所构造的散列表,并求出在等概率情况下,这两种方法查找成功和失败时的平均查找长度。请问装填因子的值是什么? 答: (1)拉链法如下图: T[0..10] ┌──┐ 0││→ 33 → 22 →∧ ├──┤ 1││→ 1 → 12 →34→ ∧ ├──┤ 2││→ 13 →∧ ├──┤ 3│ ∧ │ ├──┤ 4│ ∧ │ ├──┤ 5││→ 38 → 27 →∧ ├──┤ 6│ ∧ │ ├──┤ 7│∧ │

数据结构练习第八章-查找

数据结构练习第八章查找 1.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( ) A. 1,2,3 B. 9,5,2,3 C. 9,5,3 D. 9,4,2,3 2.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为()。 A. O(1) B. O(log 2 n) C. O(n) D. O(n2) 3.在二叉排序树中插入一个结点的时间复杂度为()。 A. O(1) B. O(n) C. O(log 2 n) D. O(n2) 4.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过()。 A. log 2n+1 B. log 2 n-1 C. log 2 n D. log 2 (n+1) 5.设有序表中有1000个元素,则用二分查找查找元素X最多需要比较()次。 A. 25 B. 10 C. 7 D. 1 6.顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为()。A. O(n) B. O(n2) C. O(n1/2) D. O(1og 2 n) 7.设二叉排序树上有n个结点,则在二叉排序树上查找结点的平均时间复杂度为()。 A. O(n) B. O(n2) C. O(nlog 2n) D. O(1og 2 n) 8.()二叉排序树可以得到一个从小到大的有序序列。 A. 先序遍历 B.中序遍历 C. 后序遍历 D. 层次遍历9.设一组初始记录关键字序列为(13,18,24,35,47,50,62,83,90,115,134),则利用二分法查找关键字90需要比较的关键字个数为()。 A. 1 B. 2 C. 3 D. 4 10.设某散列表的长度为100,散列函数H(k)=k % P,则P通常情况下最好选择()。 A. 99 B. 97 C. 91 D. 93 11.在二叉排序树中插入一个关键字值的平均时间复杂度为()。 A. O(n) B. O(1og 2n) C. O(nlog 2 n) 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. n B. n/2 C. (n+1)/2 D. (n-1)/2 15.设有序表中的元素为(13,18,24,35,47,50,62),则在其中利用二分法查找值为24的元素需要经过()次比较。 A. 1 B. 2 C. 3 D. 4

数据结构 第八章 查找自测题

第9章查找自测卷姓名班级 一、填空题(每空1分,共10分) 1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是。 2. 线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索次。设有100个结点,用二分法查找时,最大比较次数是。 3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结 点数为;比较四次查找成功的结点数为;平均查找长度为。 4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素比较大小。 5. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。 6. 散列法存储的基本思想是由决定数据的存储地址。 7. 有一个表长为m的散列表,初始状态为空,现将n(n

数据结构第8章 查找 答案

第8章 查找 测试题 及答案 一、填空题 1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。 2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。设有100个结点,用二分法查找时,最大比较次数是 7 。 3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。 解:显然,平均查找长度=O (log 2n )<5次(25)。但具体是多少次,则不应当按照公式 )1(log 12++=n n n ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。因为这是在假设n =2m -1的情况下推导出来的公式。应当用穷举法罗列: 全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!! 4.【计研题2000】折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。 5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。 6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。 7. 有一个表长为m 的散列表,初始状态为空,现将n (n

数据结构练习8

第八章查找 习题 9.1 判断题(在你认为正确的题后的括号中打√,否则打X)。 (1)用来惟一区分文件中不同记录的属性或属性组称为主关键字。( ) (2)查找成功与否的关键在于是否按主关键字查找。( ) (3)顺序文件必须用一片地址连续的存储空间来存放。( ) (4)只有在顺序存储结构上才能采用顺序查找方法。( ) (7)只要按值有序排列的线性表采用顺序存储结构就可以采用折半查找方法。( ) (8)建立稠密索引的优点是节省存储空间。( ) (9)分块查找的效率与文件中的记录被分成多少块有关。( ) (10)分块查找过程是首先查找索引表,然后再到相应的块中具体查找记录。( ) (11)B-树和B十树都是用来实现动态索引的。( ) (12)在B-树上可以进行顺序查找。( 1 (13)在B+树上可以进行顺序查找。/ 1 (14)采用散列方法存储线性表,不能存储数据元素之间的关系。( ) (15)在散列文件中进行查找不涉及关键字的比较。( ) (16)散列冲突是指同一个关键字对应了多个不同的散列地址。( ) (17)散列表的负载因子等于存人散列表中的关键字的个数。( ) (18)在散列表的查找过程中,关键字的比较次数与表中关键字的数目直接相关。( ) (19)在利用线性探测法处理冲突的散列表中,散列函数值相同的关键字总是存放在一片地址连续的存储单元中。 (20)在采用链地址法处理冲突的散列表中,散列函数值相同的关键字是链接在同一个链表中的。( ) 9.2单项选择题。 (1)衡量查找算法性能好坏的主要标准是。 A.参加比较的关键字值的多少 B.被查找的关键字值在关键字序列中的位置 C.关键字序列中是否存在被查找关键字值 D.关键字值的平均比较次数的多少 (2)顺序查找方法的优点之一是—。· A.对于被查找对象几乎没有限制B.适合排序连续顺序文件的查找 C.适合链接顺序文件的查找D.查找时间效率高 (3)对线性表采用折半查找,该线性表必须。 A.元素按值有序排列B.采用顺序结构 C.元素按值有序排列,并且采用顺序存储结构 n元素按值有序排列,并且采用链式存储结构 (4)下面的说法中,不正确的是——。 A.折半查找方法不适用于按值有序链接的链表的查找 B.折半查找方法适用于按值有序的顺序表的查找 C.折半查找方法适用于按关键字值大小有序排列的顺序文件的查找 D.折半查找方法适用于排序连续顺序文件的查找 (5)在有序表(k1,k2,…,k9,)中采用折半查找方法查找99次,其中,至少有一个元素被比较了99次,该元素是——。

数据结构第8章 查找 答案

第8章查找测试题及答案一、填空题 1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是顺序查找(线性查找)。 2. 线性有序表(a,a,a,…,a)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相123256等的元素,在 查找不成功的情况下,最多需要检索8 次。设有100个结点,用二分法查找时,最大比较次 数是7。 3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1; 比较两次查找成功的结点数为 2;比较四次查找成功的结点数为 8;平均查找长度为 3.7。 5解:显然,平均查找长度=O(logn)<5次(2)。但具体是多少次,则不应当按照公式2m来计算(即 (21×log21)/20=4.6次并不正确!)。因为这是在假设n=2-1的情况下22n推导出来的公式。应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL=74/20=3.7 !!!4.【计研 题2000】折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20, 它将依次与表中元素 28,6,12,20比较大小。 5. 在各种查找方法中,平均查找长度与结 点个数n无关的查找方法是散列查找。 6. 散列法存储的基本思想是由关键字的值决定数 据的存储地址。 7. 有一个表长为m的散列表,初始状态为空,现将n(n

数据结构第8章查找练习题

一、单选题 1.下列查找方法中,不属于动态的查找方法是( )。 A .二叉排序树法 B .平衡树法 C .散列法 D .二分查找法 2.适用于静态的查找方法为( )。 A .二分查找、二叉排序树查找 B .二分查找、索引顺序表查找 C .二叉排序树查找、索引顺序表查找 D .二叉排序树查找、散列法查找 3.静态查找表与动态查找表二者的根本差别在于( )。 A .它们的逻辑结构不一样 B .施加在其上的操作不同 C .所包含的数据元素的类型不一样 D .存储实现不一样 4.对长度为10的顺序表进行查找,若查找前面5个元素的概率相同,均为1/8,查找后面5个元素的概率相同,均为3/40,则查找任一元素的平均查找长度为( )。 A .5.5 B .5 C .39/8 D .19/4 5.( )存储方式适用于折半查找。 A .键值有序的单链表 B .键值有序的顺序表 C .键值有序的双链表 D .键值无序的顺序表 6.对线性表进行二分查找时,要求线性表必须( )。 A .以顺序方式存储 B .以链接方式存储 C .顺序存储,且结点按关键字有序排序 D .链式存储,且结点按关键字有序排序 7.在索引顺序表中查找一个元素,可用的且最快的方法是( )。 A .用顺序查找法确定元素所在块,再用顺序查找法在相应块中查找 B .用顺序查找法确定元素所在块,再用二分查找法在相应块中查找 C .用二分查找法确定元素所在块,再用顺序查找法在相应块中查找 D .用二分查找法确定元素所在块,再用二分查找法在相应块中查找 8.在索引查找中,若主表长度为144,它被均分为12子表,每个子表的长度均为12,则索引查找的平均查找长度为( )。 A .13 B .24 C .12 D .79 9.由同一关键字集合构造的各棵二叉排序树( )。 A .形态和平均查找长度都不一定相同 B .形态不一定相同,但平均查找长度相同 C .形态和平均查找长度都相同 D .形态相同,但平均查找长度不一定相同 10.对二叉排序树进行( ),可以得到各结点键值的递增序列。 A .先根遍历 B .中根遍历 C .层次遍历 D .后根遍历 11.下述序列中,哪个可能是在二叉排序树上查找35时所比较过的关键字序列? A .2,25,40,39,53,34,35 B .25,39,2,40,53,34,35 C .53,40,2,25,34,39,35 D .39,25,40,53,34,2,35 12.在A VL 树中,每个结点的平衡因子的取值范围是( )。 A .-1~1 B .-2~2 C .1~2 D .0~1 13.在AVL 树中,任一结点的( )。 A .左、右子树的高度均相同 B .左、右子树高度差的绝对值不超过1 C .左、右子树的结点数均相同 D .左、右子树结点数差的绝对值不超过1 14.下面关于B 树和B +树的叙述中,不正确的是 A .都是平衡的多叉树 B .都是可用于文件的索引结构 C .都能有效地支持顺序检索 D .都能有效地支持随机检索 15.右图是一棵( )。 2822221915100528 2610

相关文档
相关文档 最新文档