下面函数的功能是实现分块查找,空白处应该添加的内容是( )。
int BlkSearch(int*nz,int key,int block,int BLK,int len)
{
int i;
block=block—1:
if(lenlen)BLK=len;
for(i=block*BLK;i<(block+1)*BLK&&nz[i]!=0;i++)
{
if(______)
{
printf(”找到第%d个数是%d\n”,i,key);
return 0;
}
}
printf(”\n”):
printf(”查找结束\n”);
return 0;
}
已知一棵二叉树,共有n个结点,那么此二叉树的高度为( )。
已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有( )个。
无向图G有23条边,度为4的顶点有5个,度为3的顶点有4个,其余都是度为2的顶点,则图G最多有( )个顶点。
设有5个元素a,b,c,d,e顺序进栈,下列几个选项中,不可能的出栈序列是( )。
在有n个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为( )。
“破圈法”是“任取一圈,去掉圈上权最大的边”,反复执行这一步骤,直到没有圈为止。请给出用“破圈法”求解给定的带权连通无向图的一棵最小代价生成树的详细算法,并用程序实现你所给出的算法。(注意:圈就是回路)
在单链表中,每个结点含有5个正整型的数据元素(若最后一个结点的数据元素不满5个,以值0充),试编写一算法查找值为n(n>0)的数据元素所在的结点指针以及在该结点中的序号,若链表中不存在该数据元素则返回空指针。
m阶B-树是一棵( )。
设从键盘输入一个整数的序列:n,a
1
,a
2
,…,a
n
,其中n表示连续输入整数的个数。
(1)试编写一程序按整数值建立一个二叉排序树。
(2)在(1)的基础上将此二叉树上的各整数按降序写入一磁盘文件中。
如果以单链表表示集合,设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,即A-B。
已知深度为h的二叉树采用顺序存储结构已存放于数组BT[1.2
k
一1]中,请写一非递归算法,产生该二叉树的二叉链表结构。设二叉链表中链结点的构造为(lchild,data,rchild),根结点所在链结点的指针由T给出。
若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行( )次比较。
对一个由n个关键字不同的记录构成的序列,能否用比2n一3少的次数选出该序列中关键字取最大值和关键字取最小值的记录?请说明如何实现?在最坏的情况下至少要进行多少次比较?
试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点V
i
到顶点V
j
的路径(i≠j)。(注意:算法中涉及的图的基本操作必须在存储结构上实现。)
已知一棵二叉树的前序序列为:A,B,D,G,J,E,H,C,F,I,K,L;中序序列为:D,J,G,B,E,H,A,C,K,I,L,F。(1)写出该二又树的后序序列。(2)画出该二叉树。(3)求该二叉树的高度以及该二叉树中度为2、1、0的结点个数。
关于堆的一些问题: (1)堆的存储表示是顺序的,还是链接的? (2)设有一个最小堆,即堆中任意结点的关键字均大于它的左孩子和右孩子的关键字。其具有最大值的元素可能在什么地方? (3)对n个元素进行初始建堆的过程中,最多做多少次数据比较(不用大O表示法)?
在有n个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为( )。