如果具有n个顶点的图是一个环,则它有( )棵生成树。
有两个集合A和B,利用带头结点链表表示,设头指针分别为la和lb。两集合的链表元素皆为递增有序。设计一个算法,将A与B合并,合并后仍然保持整个链表中的数据依次递增。不得利用额外的结点空间,只能在A和B的原有结点空间上完成。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。 (3)分别给出算法各部分的时间复杂度。
已知深度为h的二叉树采用顺序存储结构已存放于数组BT[1..2
h
-1]中,请写一非递归算法,产生该二叉树的二又链表结构。设二又链表中链结点的构造为(lchild,data,rchild),根结点所在链结点的指针由T给出。
有6个元素按6,5,4,3,2,1的顺序依次进栈,不合法的出栈序列是( )。
有关二叉树下列说法正确的是( )。
对于n个元素组成的线性表进行快速排序时,所需进行的比较次数与这n个元素的初始排序有关。问: (1)当n=7时,在最好情况下需进行多少次比较?请说明理由。 (2)当n=7时,给出一个最好情况的初始排序的实例。 (3)当n=7时,在最坏情况下需进行多少次比较?请说明理由。 (4)当n=7时,给出一个最坏情况的初始排序的实例。
如下图所示,在下面的5个序列中,符合深度优先遍历的序列有()个。①aebfdc②acfdeb③aedfcb④aefdbc⑤aecfdb
在下面关于树的相关概念的叙述中,正确的是( )。
若对有18个元素的有序表做二分查找,则查找A[3]的比较序列的下标为( )。
有一种简单的排序算法,叫做计数排序(Count sorting)。这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键字比该记录的关键字小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。 设计实现计数排序的算法。对于有n个记录的表,关键字的比较次数是多少?与简单选择排序相比较,这种方法是否更好?为什么?
线性表中存放的主要是( )。
判断线索二叉树中某结点*p有左孩子的条件是( )。
把树的根结点的层数定义为1,其他结点的层数等于其父结点所在层数加上I。设T是一棵二叉树,K
i
和K
j
是T中子结点数小于2的结点中的任意两个,它们所在的层数分别为λK
i
和λK
j
,当关系式|λK
i
一λK
j
|≤1一定成立时,则称T为一棵( )。
已知顺序表A,在不改变顺序表中奇数号元素与偶数号元素相对位置的前提下,设计算法,将所有奇数号元素移到所有偶数号元素前。
如果以单链表表示集合,设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,即A一B。
已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p为fp的左孩子。试编写算法,删除p所指结点。
执行完下列语句段后,i值为( )。 int f(int x){ return((x>0)?x*f(x—1):2); } i=f(f(1));
设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。
设有一个n×n的上三角矩阵(a
ij
),将其上三角中的元素按先行后列的顺序存于数组B[m]中,使得B[k]=a
ij
且k=f
1
(i)f
2
(j)+c,请推导出函数f
1
、f
2
和常数c,要求f
1
和f
2
中不含常数项。
顺序查找法适用于查找顺序存储或链式存储的线性表二分法查找只适用于查找顺序存储的有序表,平均比较次数为( )。在此假定N为线性表中结点数,且每次查拔都是成功的。
