最小最大堆(minmaxHeap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆。
线性表(a
1
,a
2
,…,a
n
)以链式存储方式存储时,访问第i位置元素的时间复杂度为( )。
已知一棵二叉树的前序序列为: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的结点个数。
当各边上的权值( )时,BFS算法可用来解决单源最短路径问题。
冒泡排序方法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)。请给出上浮和下沉过程交替的冒泡排序算法。
有一组数据(15,9,7,8,20,一1,7,4),用堆排序的筛选方法建立的初始堆为( )。
将十进制的关键字用二进制数表示,对基数排序所需的时间和附设空间分别有什么影响?各是多少?
线性表中存放的主要是( )。
对包含n个关键码的散列表进行检索,平均检索长度为( )。
用C语言或PASCAL编写一用链接表(Linked List)解决冲突的哈希表插入函数。
写一个HeapInsen(R,key)算法,将关键字插入到堆R中,并保证插入后R仍是堆。请分析算法的时间复杂度。提示:将key先插入R中已有元素的尾部(即原堆的长度加1的位置,插入后堆的长度加1),然后自下往上调整,使插入的关键字满足堆性质。
B单项选择题1-40小题。下列每题给出的四个选项中,只有一个选项是最符合题目要求的。/B
为了增加内存空间的利用率和减少溢出的可能性,通常采用两个栈利用同一块存储空间的方法。通常两个栈的栈底设在内存空间的两端,而栈顶相向,迎面增长。已知有两个栈s1、s2都采用顺序栈方式,并且共享一个存储区[0~maxsize—1]。 设计共享存储空间的两个栈s1、s2的入栈和出栈算法。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释;
以下叙述中正确的是( )。 I.对有向图G,如果以任一顶点出发进行一次深度优先或广度优先搜索能访问到每个顶点,则该图一定是完全图 Ⅱ.连通图的广度优先搜索中一般要采用队列来暂存访问过的顶点 Ⅲ.图的深度优先搜索中一般要采用栈来暂存访问过的顶点
若G是一个具有36条边的非连通无向图(不含自回路和多重边),则图G的结点数至少是( )。
设排序二叉树中结点的结构由三个域构成:数据域data,指向左儿子结点的指针域left,指向右儿子结点的指针域right。设data域为正整数,该二叉树树根结点地址为T。现给出一个正整数x。请编写非递归程序,实现将data域的值小于等于x的结点全部删除。
线性表(a
1
,a
2
,a
3
,…,a
n
)中元素递增有序且按顺序存储于计算机内。要求设计一算法用最少时间在表中查找数值为x的元素,并将其与后继元素位置相交换。如果线性表中找不到该元素,则将该元素插入表中并使表中元素仍递增有序。
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
(3)分别给出算法各部分的时间复杂度。
下面关于B和B+树的叙述中,不正确的是( )。
在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为O的结点数为( )个。
某个任务的数据模型可以抽象为给定的k个集合:S
1
,S
2
,…,S
k
。其中S
i
(1≤i≤k)中的元素个数不定。在处理数据过程中将会涉及元素的查找和新元素的插入两种操作,查找和插入时用一个二元组(i,x)来规定一个元素,i是集合的序号,x是元素值。设计一种恰当的数据结构来存储这k个集合的元素,并能高效地实现所要求的查找和插入操作。
(1)构造数据结构,并且说明选择的理由。
(2)若一组数据模型为S
1
={10.2,1.7,4.8,16.2},S
2
={1.7,8.4,0.5},S
3
={4.8,4.2,3.6,2.7,5.1,3.9},待插入的元素二元组为(2,11.2)和(1,5.3),按你的设计思想画出插入元素前后的数据结构状态。
