单项选择(2023年计算机统考

现有非空双向链表 L,其结点结构为:prer|data|next。

prer 是指向前直接前驱结点的指针,next 是指向直接后继结点的指针。若要在 L 中指针 p 所指向的结点( 非尾结点) 之后插入指针 s 指向的新结点, 则在执行了语句序列: “s->next=p->next;p->next=s”后,还要执行【 】

A、s->next->prev=p; s->prev=p;

B、p->next->prev=s;s->prev=p;

C、s->prev=s->next->prev; s->next->prer=s;

D、p->next->prev=s->prev; s->next->prev=p;

答案解析

C在双向链表中插入一个结点,需要修改4个指针,修改顺序没有强制要求。由于题中已经修改了两个指针,故只需按此思路继续修改另两个指针即可。假设链表L中p的后继为q,如下图所示:考虑新加入的结点s,初始四个指针的状态为:p->next = q; q->prev = p; s->next = null; s->prev = null;按题目要求,把s插入p之后,得目标图如下:此时指针状态为:p->next = s; q->prev = s; s->next = q; s->prev = p;先按照题目要求执行前两步:①s->next = q; 注意此时 q = p->next,即 s->ne...

查看完整答案

讨论

下列对顺序存储的有序表 (长度为 n)实现给定操作的算法中平均时间复杂度为 O(1)的是【 】

对n个关键码构成的序列采用直接插入排序法进行升序排序的过程是:在插入第i个关键码ki时,其前面的 i-1 个关键码已排好序,因此令k与 ki-1、ki-2、…,依次比较,最多到 k1为止,找到插入位置并移动相关元素后将ki插入有序子序列的适当位置,完成本趟(即第 i-1 趟)排序。以下关于直接插入排序的叙述中,正确的是【 】 。

对于下面的有向图,采用邻接链表存储时,顶点 0的表结点个数为2,顶点3的表结点个数为0,顶点1的表结点个数为【 】。

对于下面的有向图,其邻接矩阵是一个【 】的矩阵。

对下图所示的二叉树进行中序遍历(左子树、根结点、右子树)的结果是【 】。

对关键码序列(12,24,15,56,20,87,69,9)采用散列法进行存储和查找,并设散列函数为H(Key)=Key%11(%表示整除取余运算)。采用线性控查法(顺地探查可用存储单元)解决冲突所构造的散列表为【 】。

对关键码序列(9,12,15,20,24,29,56,69,87)进行二分查找(折半查找),若要查找关键码15,则需依次与【 】进行比较。

对于初始为空的栈S,入栈序列为a、b、c、d,且每个元素进栈、出栈各1次。若出栈序列的第一个元素为d,则合法的出栈序列为【 】。

递归函数执行时,需要【 】来提供支持。

表示“以字符a开头且仅由字符a、b构成的所有字符串”的正规式为【 】。