一、选择题
- 用
链接方式存储的队列
,在进行插入
运算时( ).
A. 仅修改头指针 B. 头、尾指针都要修改
C. 仅修改尾指针 D.头、尾指针可能都要修改 - 对
n
个记录的文件进行快速排序
,所需要的辅助存储空间
大致为
A. O(1) B. O(n) C. O(log2n) D. O(n2) - 设有
n
个待排序的记录关键字,则在堆排序中需要( )个辅助记录单元。
A. 1 B. n C. nlog2n D. n2 - 在二叉排序树中
插入一个结点
的时间复杂度为( )。
A. O(1) B. O(n) C. O(log2n) D.O(n2) - 设一组初始记录关键字序列为
(50,40,95,20,15,70,60,45)
,则以增量d=4
的一趟希尔排序结束后前4条
记录关键字为( )。
A. 40,50,20,95 B. 15,40,60,20
C. 15,20,40,45 D. 45,40,15,20 - 设连通图
G
中的边集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)}
,则从顶点a
出发可以得到一种深度优先遍历的顶点序列为( )。
(A) abedfc (B) acfebd C. aebdfc (D) aedfcb - 设某无向图中有
n
个顶点e
条边,则建立该图邻接表的时间复杂度为( )。
(A) O(n+e) (B) O(n2) C. O(ne) (D) O(n3) - 设顺序线性表中有
n
个数据元素,则删除表中第i
个元素需要移动( )个元素。
(A) n-i (B) n+l -i C. n-1-i (D) i - 设顺序线性表的长度为
30
,分成5
块,每块6
个元素,如果采用分块查找,则其平均查找长度为( )。
(A) 6 (B) 11 C. 5 (D) 6.5 - 设某散列表的长度为
100
,散列函数H(k)=k % P
,则P
通常情况下最好选择( )。
A. 99 B. 97 C. 91 D. 93 - 设有
n
个关键字具有相同的Hash
函数值,则用线性探测法把这n
个关键字映射到HASH
表中需要做( )次线性探测。
A. n2 B. n(n+1) C. n(n+1)/2 D.n(n-1)/2
二、填空题
- 后缀算式9 2 3 + – 10 2 / -的值为__________。中缀算式(3+4X)-2Y/3对应的后缀算式为________________。
- 向一棵B-树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。
- 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
- 设某无向图中顶点数和边数分别为 n 和 e,所有顶点的度数之和为d,则 e=_______。
- 设一组初始记录关键字序列为(55,63,44,38,75,80,31,56),则利用筛选法建立的初始堆为___________________________。
- 设输入序列为1、2、3,则经过栈的作用后可以得到___________种不同的输出序列。
- 设哈夫曼树中共有n个结点,则该哈夫曼树中有________个度数为1的结点。
- 设查找表中有100个元素,如果用二分法查找方法查找数据元素X,则最多需要比较________次就可以断定数据元素X是否在查找表中。
- 设一组初始记录关键字序列(k1,k2,……,kn)是堆,则对i=1,2,…,n/2而言满足的条件为_______________________________。
- 散列表中解决冲突的两种方法是_____________和_____________。
- 完全二叉树中第5层上最少有__________个结点,最多有_________个结点。
- 设连通图G中有n个顶点e条边,则对应的最小生成树上有___________条边。
- 设某顺序循环队列中有m个元素,且规定队头指针F指向队头元素的前一个位置,队尾指针R指向队尾元素的当前位置,则该循环队列中最多存储_______队列元素。
- 设需要对5个不同的记录关键字进行排序,则至少需要比较_____________次,至多需要比较_____________次。
- 设二叉排序树的高度为h,则在该树中查找关键字key最多需要比较_________次。
- 设一棵m叉树脂的结点数为n,用多重链表表示其存储结构,则该树中有_________个空指针域。
- 下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。
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);
}
- 设散列函数
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];_______________________;
}
}
- 下面程序段的功能是实现在二叉排序树中插入一个新结点,请在下划线处填上正确的内容。
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__________________________;
}
- 下面程序段的功能是建立二叉树的算法,请在下划线处填上正确的内容。
typedef struct node{int data;struct node *lchild;________________;}bitree;
void createbitree(bitree *&bt)
{
scanf(“%c”,&ch);
if(ch=='#') ___________;else
{ bt=(bitree*)malloc(sizeof(bitree)); bt->data=ch; ________;createbitree(bt->rchild);}
}
三、应用题
- 画出向小根堆中加入数据
4, 2, 5, 8, 3
时,每加入一个数据后堆的变化。 - 设一组有序的记录关键字序列为
(13,18,24,35,47,50,62,83,90)
,查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。 - 已知待散列的线性表为
(36,15,40,63,22)
,散列用的一维地址空间为[0..6]
,假定选用的散列函数是H(K)= K mod 7
,若发生冲突采用线性探查法处理,试:
①计算出每一个元素的散列地址并在下图中填写出散列表:
② 求出在查找每一个元素概率相等情况下的平均查找长度。
— | —————— | ———- | — | —- | —– | —- | —– |
---|---|---|---|---|---|---|---|
hash |
0 | 1 | 2 | 3 | 4 | 5 | 6 |
key |
- 画出广义表LS=(( ) , (e) , (a , (b , c , d )))的头尾链表存储结构。
- 设散列表的地址范围是[ 0…9 ],散列函数为H(key)= (key 2 +2)MOD 9,并采用链表处理冲突,请画出元素7、4、5、3、6、2、8、9依次插入散列表的存储结构。
- 设散列表的长度为8,散列函数H(k)=k mod 7,初始记录关键字序列为(25,31,8,27,13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。
版权声明:本文为qq_40818798原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。