在单链表指针为P的结点之后插入指针为s的结点,正确的操作是( )。
请利用两个栈s1和s2来模拟一个队列。已知栈的三个运算定义如下: (1)push(st,X):元素X入st栈: (2)pop(st,X):st栈顶元素出栈,赋给变量X: (3)sempty(st):判st栈是否为空。 那么如何利用栈的运算来实现该队列的三个运算: (1)enqueue:插入一个元素入队列; (2)dequeue:删除一个元素出队列: (3)queue—empty:判队列为空。(请写明算法的思想及必要的注释。)
有两个集合A和B,利用带头结点链表表示,设头指针分别为la和lb。两集合的链表元素皆为递增有序。设计一个算法,将A与B合并,合并后仍然保持整个链表中的数据依次递增。不得利用额外的结点空间,只能在A和B的原有结点空间上完成。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用c或C++或Java语言描述算法,关键之处给出注释。 (3)分别给出算法各部分的时间复杂度。
下面关于图的存储结构的叙述中正确的是( )。
( )的遍历仍需要栈的支持。
B单项选择题1-40小题。下列每题给出的四个选项中,只有一个选项是最符合题目要求的。/B
为了处理参数及返回地址,在递归过程或函数调用时,要用一种称为( )的数据结构。
为了增加内存空间的利用率和减少溢出的可能性,通常采用两个栈利用同一块存储空间的方法。通常两个栈的栈底设在内存空间的两端,而栈顶相向,迎面增长。已知有两个栈s1、s2都采用顺序栈方式,并且共享一个存储区[0~maxsize—1]。 设计共享存储空间的两个栈s1、s2的入栈和出栈算法。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释;
采用邻接表存储的图的深度优先遍历算法类似于二叉树的( )算法。
已知当前栈中有n个元素,此时如果有新的元素需要执行进栈操作,但发生上溢,则由此可以判断,此栈的最大容量为( )。
就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是( )。
已知有向图G=(V,A),其中V={a,b,c,d,e},A={,,,,,}。对该图进行拓扑排序,下面序列中不是拓扑排序的是( )。
执行完下列语句段后,i值为( )。 int f(int x){return((x>0)?x,x*f(x—1):2);} i=f(f(1));
已知一个双向链表,其结点结构为数据域data、左指针域llink、右指针域rlink;设指针P指向双向链表中的某个结点。写出一个算法,实现P所指向的结点和它的前缀结点之间顺序的互换。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
“破圈法”是“任取一圈,去掉圈上权最大的边”,反复执行这一步骤,直到没有圈为止。请给出用“破圈法”求解给定的带权连通无向图的一棵最小代价生成树的详细算法,并用程序实现你所给出的算法。(注意:圈就是回路)
邻接多重表的存储结构和十字链表类似,也是由顶点表和边表组成,每一条边用一个结点表示,其顶点表结点结构和边表结点结构如下图所示:关于图中各个域的说明,不正确的是()。
在归并排序中,若待排序记录的个数为20,则共需要进行( )趟归并,在第三趟归并中,是把长度为( )的有序表归并为长度为( )的有序表。
写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。描述上述算法。
已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p为fp的左孩子。试编写算法,删除p所指结点。
以下数据结构中,( )是线性数据结构。
