若有N个元素已构成一个小根堆,那么如果增加一个元素为K
n+1
,请用文字简要说明如何在log
2
n的时间内将其重新调整为一个堆。
关于链表的特点,下面的叙述中不正确的是( )。
若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为( )。
设计一个算法求图的中心点。设v是有向图G的一个顶点,把v的偏心度定义为: MAX{从w到v的最短距离|w属于V(G)} 如果v是有向图G中具有最小偏心度的顶点,则称顶点v是G的中心点。
用邻接矩阵A表示图,判定任意两个顶点v
i
和v
j
之间是否有长度为m的路径相连,则只要检查( )的第i行第j列的元素是否为零即可。
某个待排序的序列是一个可变长度的字符串序列,这些字符串一个接一个地存储于唯一的字符数组中。请改写快速排序算法,对这个字符串序列进行排序。
具有10个叶结点的二叉树中有( )个度为2的结点。
在对一组记录(50,40,95,20,15,70,60,45,80)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需比较( )次。
线性表(a
1
,a
2
,a
3
,…,a
n
)中元素递增有序且按顺序存储于计算机内。要求设计算法完成以下内容:
(1)用最少的时间在表中查找数值为x的元素。
(2)若找到将其与后继元素位置相交换。
(3)若找不到将其插入表中并使表中元素仍递增有序。
判断括号是否匹配是栈的主要应用之一。设字符表达式存储在数组E[n]中,’#’为字符表达式的结束符。给出一个算法,用于判断表达式中括号("("和")")是否配对。要求:
已知下列各种初始状态(长度为n)元素,试问当利用直接插入法进行排序时,至少需要进行多少次比较(要求排序后的文件按关键字从大到小顺序排列)?
(1)关键字自小到大有序(key
1
<key
2
<…<key
n
);
(2)关键字自大到小逆序(key
1
>key
2
>…>key
n
);
(3)奇数关键字顺序有序,偶数关键字顺序有序(key
1
<key
3
<…,key
2
<key
4
<…);
(4)前半部分元素按关键字顺序有序,后半部分元素按关键字顺序逆序(key
1
<key
2
<…<key
m
,key
m+1
>key
m+2
>…>key
n
,m为中间位置)。
已知有一维数组A[0..m×n一1],若要对应为m行、n列的矩阵,将元素A[k](0≤k
在一棵二叉树中,单分支结点数为30,双分支结点数为15,则叶子结点数为( )。
设某二叉树中只有度为0和度为2的结点,如果此二叉树的高度为100,那么此二叉树中所包含的结点数最少为( )。
在含有15个结点的平衡二叉树上,查找关键字为28(存在该结点)的结点,则依次比较的关键字有可能是( )。
假设一个序列1,2,3,…,n依次进栈,如果出栈的第一个元素是n,那么第i(1≤i≤n)个出栈的元素是( )。
一个递归算法必须包括( )。
有一个不带头结点的单链表list,链表中结点都有两个域:数据域data和指针域link。已知初始时该单链表无序,请设计一个算法将该链表按结点数据域的值的大小,将其从小到大依次重新链接,在链接过程中不得使用除该链表以外的任何链结点空间。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
已知顺序表A,在不改变顺序表中奇数号元素与偶数号元素相对位置的前提下,设计算法,将所有奇数号元素移到所有偶数号元素前。 (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。 (3)说明你所设计算法的时间复杂度和空间复杂度。
键树(Trie),又称数字查找树,它是一棵度大于等于2的树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。请用类C语言或类PASCAL语言编写一个在键树T上查找关键字等于给定值KEP的记录的算法。若查找成功,返回指向该记录的指针;否则返回空指针。
