1.适合于顺序查找法的存储结构是( A )。
A. 顺序存储和链式存储 B. 索引存储
C. 压缩存储 D. 散列存储
2.进行二分法查找要求查找表( C )。
A. 采用链式存储结构且关键字有序 B. 采用顺序存储结构
C. 采用顺序存储结构且关键字有序 D. 采用链式存储结构
3.对长度为n的线性表进行顺序查找,在等概率情况下,平均查找长度为( D ).
A. n B. n-1 C. n/2 D. (n+1)/2
4.设有序表的关键字序列为(2,23,34,45,65,76,87,89,201,223,320),当用二分法查找法查找关键字值为89的比较次数是( )。
A. 2 B. 3 C. 4 D. 5
5.在分块查找中,若线性表中共有625个元素,当采用顺序查找确定块时,每块的长度是( B )。
A. 15 B. 25 C. 30 D. 35
6.采用二分法查找,平均查找长度为( D )。
A. O(n) B. O(n2) C. O(nlog2n) D. O(log2n)
7.设有n个元素构成二叉排序树,最差情况下,平均查找长度是( B )。
A. O(n) B. O(n2) C. O(nlog2n) D. O(log2n)
8.在m阶B-树除根结点外,其余结点的关键字个数至少应有( a )。
A. 上|m/2| -1 B. B. +1 D. m-1
9.设有n个元素构成二叉排序树,最好情况下,平均查找长度是( d )。
A. O(n) B. O(n2) C. O(nlog2n) D. O(log2n)
10.在m阶B-树中插入一个关键字,首先插入在某个叶子结点上,若该结点的关键字树超过( d )时,则应对该结点进行分裂。
A. -1 B. B. +1 D. m-1
11.处理冲突的方法是( D )。
A. 除留余数法 B. 平方取中法
C. 随机数法 D. 开放定址法
12.若表长为m,散列函数为h(key)=key%p ,则p的选取原则是( C )。
A. p=m B. p<m
C. p小于等于m并且为素数或不包含20以内的质因数的合数;
D. p可取任何值。
13.长度为n的线性表进行顺序查找查找失败的平均查找长度是( B)。
A. (n+1)/2 B. n+1 C. n/2 D. n
14.二叉排序树如下:
查找成功的平均查找长度是( )。
A. 2.5 B. 3 C. 4 D. 2.8
15.二叉排序树如14题所示,查找不成功的平均查找长度是( )。
A. 2.5 B. 3 C. 4 D. 2.8
1.在各种查找方式中,平均查找长度与结点个数n无关的查找方法是 。
2.二分法查找要求 并且采用 。
3.在散列表中, 越大,发生 的机会越大。
4.在分块查找中,首先查找 ,然后查找 。
5.分块查找方法中,要求关键字逐块 ,块内元素关键字 。
6.对二叉排序树进行中序遍历所得遍历序列是 。
7.因为散列函数是对可能的关键字到确定的有限地址集的压缩映像,所以 不可避免。
8.堆积是指 争夺同一个后继散列地址的现象。
9.在具有24个元素的有序表上,进行二分法查找。比较一次查找成功的结点数是 ,比较3次查找成功的结点数是 ,比较5次查找成功的结点数是 。平均查找长度是 。
10.二叉排序树上插入新结点,总是作为 ,无须移动其它结点,只需将某结点的对应孩子指针域由 改为 。
11.B-树上的查找分为两个步骤,即读盘操作,属于外查找;在结点内查找,属于 。外查找的读盘次数不超过 。
12.散列查找的关键是选择一个“好”的 和 。
1.简述顺序查找、二分法查找和分块查找的优缺点。
2.依此输入关键字序列(23,35,18,30,80,20,16,40)试构成二叉排序树,并计算查找成功的平均查找长度和失败的平均查找长度。
3.已知关键字序列为(19,14,23,01,68,20,84,27,55,11,10,79),设散列函数为H(key)=key%13,采用拉链法解决冲突,试构造散列表。并计算查找成功的平均查找长度和失败的平均查找长度。
4.已知关键字序列为(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),设散列函数为H(key)=ord(key首字母)%65/2,采用拉链法、线性探测法解决冲突,m=13试分别构造散列表。并计算查找成功的平均查找长度和失败的平均查找长度。
5.已知一个散列表如下图所示:
|
|
35 |
|
20 |
|
|
33 |
|
48 |
|
|
59 |
0 1 2 3 4 5 6 7 8 9 10 11 12
其散列函数h(key)=key%13,处理冲突的方法为双重散列法,探测序列为:
hi=(h(key)+i*h1(key))%m i=0,1,2,…,m-1
其中 h1(key)=key%11+1 ,回答下列问题:
(1)对表中关键字35,20,33和48进行查找时,所需进行的比较次数各为多少?
(2)该散列表在等概率查找时查找成功的平均查找长度为多少?
6.在关键字序列(07,12,15,18,27,32,41,92)中用二分查找法查找和给定值92相等的关键字,请写出查找过程中依次和给定值“92”比较的关键字。
1.阅读程序
Linklist La=NULL;
void inordbst(Bstree T)
{
Linknode *p;
if(T)
{inordbst(T->rchild);
p=(linknode *)malloc(sizeof(Linknode));
p->data=t->key;
p->next=La;
La=p;
inordbst(T->lchild);
}
}
(1)指出程序功能;
(2)若二叉排序树T右图所示:试画出*La的结构;
2.阅读程序指出程序功能
int searchhash(keytype k, Hashtable T)
{ //T[0..m-1]为散列表,p<m
int i=0,pos,h;
h=k%p; pos=h;
while(T[pos].key!=k&&T[pos].key)
{i++;
pos=(h+i)%m;
}
if (T[pos].key==k) return pos;
else return –1;
}
3.阅读程序填上适当的语句(二分法查找)
int BinSearch(Seqlist R,keytype K)
{//R[1..n]为有序表
int low=1,high=n,mid;
while(low<=high)
{ (1)
if (R[mid].key==K)return mid;
if (R[mid].key>K)
(2)
else
low=mid+1;
}
(3)
}
1.散列表中删除一个结点的算法。
2.二叉排序树查找的非递归算法。
3.链表结构上实现顺序查找,要求利用监视哨技术。
4.设顺序表中关键字是递增有序的,试写一顺序查找算法,将哨兵设在表的高下标端。然后求出等概率情况下查找成功与失败时的平均查找长度ASL。
5.试写出二分法查找的递归算法。
6.试写一算法判别给定的二叉树是否为二叉排序树,设此二叉树以二叉链表为存储结构,且树中结点的关键字均不相同。
7.试写一递归算法,从大到小输出二叉排序树中所有其值不小于x的关键字。要求算法的时间为O(lgn+m),n为树中结点数,m为输出的关键字个数(提示:先遍历右子树,后遍历左子树)。
8.写一个遍历B-树的算法,是输出的关键字序列递增有序。算法中的读盘操作可假定为Diskread。
9.若采用除余法作为散列函数,线性探测法解决冲突,则9.4.4节中通用的散列表查找算法可以改写为对线性探测法专用的算法:
假设散列表上的删除操作已将结点的关键字标记为DELETE(例如,不妨设DELETE为-2)。请修改上述散列表上的查找算法及插入算法Hashinsert,使之能正确的查找和插入。
10.用拉链法解决冲突,有关的类型说明和插入算法如下,请据此写出散列表的建表、查找及删除算法。
typedef struct node {
Keytype key;
Infotype otherinfo;
struct node *next;
}Cnodetype;
typedef Cnodetype *Chashtable[m];
void chainhashinsert(Chashtable T,Keytype K){
Cnodetype *p;
int addr;
p=chainhashsearch(T,K);
if (p) printf("duplicate key!");
else {
addr=K%m;
p=(Cnodetype*)malloc(sizeof(Cnodetype));
p->key=K;p->next=T[addr];T[addr]=p;
}endif
}//chainhashinsert