已知一个带有头结点的单链表L,其结点结构由两部分组成:数据域data,指针域link。设计一个算法,以最高效的方法实现在单链表中删除数据域最小值结点。要求:
在有向图G的拓扑序列中,若顶点v
i
在顶点v
j
之前,则下列情形不可能出现的是( )。
试设计一算法,使得在尽可能少的时间内重排数组,将所有取负值的关键字放在所有取非负值的关键字之前,并分析算法的时间复杂度。
写一个建立堆的算法:从空堆开始,依次读入元素,调用上题中堆插入算法将其插入堆中。
关于B-树,下列说法中不正确的是( )。
算术表达式a+b*(c+d/e)转为后缀表达式后为( )。
在图中所示的4棵二叉树中,()不是完全二叉树。
有n个叶子结点的哈夫曼树的结点总数为( )。
构建一个哈夫曼树,如果给定权值的个数为n,那么哈夫曼树的结点总数为( )。
设排序二叉树中结点的结构由三个域构成:数据域data,指向左儿子结点的指针域left,指向右儿子结点的指针域right。设data域为正整数,该二叉树树根结点地址为T。现给出一个正整数x。请编写非递归程序,实现将data域的值小于等于x的结点全部删除。
如图所示的T2是由森林T1转换而来的二又树,那么森林T1有()个叶结点。
设记录R
1
,R
2
,…,R
n
按关键字值从小到大顺序存储在数组r[1..n]中,在r[n+1]处设立一个监督哨,其关键字值为+∞。试写一查找给定关键字k的算法,并画出此查找过程的判定树,求出在等概率情况下查找成功时的平均查找长度。
有一个不带头结点的单链表list,链表中结点都有两个域:数据域data和指针域Iink。已知初始时该单链表无序,请设计一个算法将该链表按结点数据域的值的大小,将其从小到大依次重新链接,在链接过程中不得使用除该链表以外的任何链结点空间。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
下列4组含C1—C7的结点序列中,()是下图所示的有向图的拓扑序列。
已知关键字序列(K
1
,K
2
,K
3
,…,K
n-1
)是大根堆。试写出一算法将(K
1
,K
2
,K
3
,…,K
n-1
,K
n
)调整为大根堆,并利用调整算法写一个建大根堆的算法。
在一个( )图中寻找拓扑序列的过程称为( )。
设从键盘输入一个整数的序列:n,a
1
,a
2
,…,a
n
,其中n表示连续输入整数的个数。
(1)试编写一程序按整数值建立一个二叉排序树。
(2)在(1)的基础上将此二叉树上的各整数按降序写入一磁盘文件中。
下面关于m阶B树的说法中,正确的是( )。 ①每个结点至少有两棵非空子树。 ②树中每个结点至多有m-1个关键字。 ③所有叶子在同一层上。 ④当插入一个数据项引起B树结点分裂后,树长高一层。
下列内部排序算法中,其比较次数(或交换次数)与序列初态无关的算法是( )。
以下关于十字链表的说法中,不正确的是( )。
