工学

单选题在*p之前插入节点*s的操作是()A q=s->next;s=p->next;B q->next=s;s->next=p;C s=p->next;q=s->next;D s->next=p;q->next=s;

题目
单选题
在*p之前插入节点*s的操作是()
A

q=s->next;s=p->next;

B

q->next=s;s->next=p;

C

s=p->next;q=s->next;

D

s->next=p;q->next=s;

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。

A.p->next=s;s->next=p->next;

B.s->next=p->next;p->next=s;

C.p->next=s;p->next=s->next;

D.p->next=s->next;p->next=s;


正确答案:B

第2题:

在单链表中在指针p所指节点后插入节点q的操作是

A.q:=p↑.link;p↑.link:=q↑.link

B.p↑.link:=q↑.link;q↑.link:=p↑.link

C.q↑.link:=p;p↑.link:=q

D.q↑.link:=p↑.link;p↑.link:=q


正确答案:D
解析:单链表中指针p所指节点后插入节点 q的操作是q↑.link:=p↑.link;p↑.link:=q。

第3题:

在一个单向链表中p所指结点之后插入一个s所指向的结点时,应执行s->next=p->next;和 的操作。


参考答案:s->next=p->next;

第4题:

在一个单链表中,若q节点是p节点的前驱节点,若在q与p之间插入节点s,则执行( )。

A.s→qink=p→link; p→link=s

B.p→link=s; s→qink=q

C.p→link=s→link; s→link=p

D.q→link=s; s→link=p


正确答案:D
解析:在单链表中插入一个元素需要执行以下步骤:首先将待插入节点的前驱节点的指针域指向待插入节点,然后将待插入节点的指针域指向待插入节点的前驱节点原先的后继节点。

第5题:

在一个单链表中,若p所指结点不是最后结点,在p所指结点之后插入s所指结点,则应执行(32)操作。

A.s->link=p;p->link=s;

B.s->link=p->link:p->link=s:

C.S->link=p->link; p=s:

D.p->link=s:s->link=p:


正确答案:B
解析:s->link=p->link;s的后继指向p的后继;p->link=s;p的后继为s,这样实现在p后插入s结点的操作。

第6题:

阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。

【说明】

函数DeleteNode(Bitree*r,inte)的功能是:在树根节点指针为r的二叉查找(排序)树上删除键值为e的节点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树节点的类型定义为:

typedef struct Tnode{

int data;/*节点的键值*/

struct Tnode *Lchild,*Rchiid;/*指向左、右子树的指针*/

}*Bitree;

在二叉查找树上删除一个节点时,要考虑3种情况。

①若待删除的节点p是叶子节点,则直接删除该节点。

②若待删除的节点p只有一个子节点,则将这个子节点与待删除节点的父节点直接连接,然后删除节点。

③若待删除的节点p有两个子节点,则在其左子树上,用中序遍历寻找关键值最大的节点 s,用节点s的值代替节点p的值,然后删除节点s,节点s必属于上述①、②情况之一。

【函数5-5】

int DeleteNode(Bitree *r,int e){

Bitree p=*r,pp,s,c;

while( (1) {/*从树根节点出发查找键值为e的节点*/

pp=p;

if(e<p->data)p=p->Lchild;

else p=p->Rehild;

}

if(!p)retrn -1;/*查找失败*/

if(p->Lchild && p->Rchild){/*处理情况③*/

s=(2); pp=p;

while( (3)){pp=s;s=s->Rchild;}

p->data=s->data;p=s;

}

/* 处理情况①、②*/

if((4))c=p->Lchild;

else c=p->Rchild;

if(p== *r)*r=c;

else if((5))pp->Lchild=c;

else pp->Rchild=c;

free(p);

return 0;

}


正确答案:(1) p&&p->data!=e或p&&(*p).data!=e (2) p->Lchild或(*p).Lchild (3) s->Rchild或(*s).Rchild (4) p->Lchild或(*p).Lchild (5) p==pp->Lchild或p==(*pp).Lchild
(1) p&&p->data!=e或p&&(*p).data!=e (2) p->Lchild或(*p).Lchild (3) s->Rchild或(*s).Rchild (4) p->Lchild或(*p).Lchild (5) p==pp->Lchild或p==(*pp).Lchild 解析:本题考查二叉查找树上的删除操作,题中已清楚说明了删除操作的算法。
删除一个节点首先需要进行查找,只有找到了欲删除的节点才谈得上删除。程序首先让指针p指向根节点,通过while循环进行查找。循环体内,先用pp记录p,这样pp最终将记录p的父节点,然后如果得删关键字e小于当前节点p的键字值,则p赋值为p->Lchild,即往左子树继续查找,否则,p赋值为p->Rchild,即往右子树继续查找。显然,循环体内并未处理关键字正好等于当前节点p的键值的情况,因此该条件应体现在while循环的终止条件中。故空(1)应填“p&&p->data!=e”。
空(2)比较简单。此处是处理情况③,而根据算法描述,情况③要在左子树中寻找键值最大的节点,亦即左子树中最右的节点(右节点为NULL),并保存在s中。故空(2)应填 p->Lchild。空(3)所在while循环正是用来在p的左子树中查找右节点为NULL的节点的,故空(3)应填s->Rchild。
接下来处理情况①和情况②,这两种情况本身是比较简单的,但在此将两者合并在一起处理,增加了难度。首先用变量c来存储用来替换p的节点,然后分情况将c正确插入。
当要删除的节点为叶节点时(情况①),其p->Lchild和p->Rchild均为NULL;当要删除的节点只有一个子节点时(情况②),若仅有左子节点,则p->Rchild为NULL,若仅有右子节点,则p->Lchild为NULL。所以当p->Lchild不为NULL时,说明是情况②:仅有左节点情况,故c=p->Lchild。当p->Lchild为NULL时,则有两种可能:p->Rchild也为NULL,则对应情况①叶节点情况;p->Rchild不为NULL,则对应情况②仅有右节点情况。但这两种情况下,亦可以统一采用c=p->Rchild,因为当p是叶节点时用NULL代替其位置即可。所以空(4)应填“p->Lchild!=NULL”。
接下来就要将c正确插入到原二叉树中。上面已经提到,pp指向的是p节点的父节点。因此若p是pp的左节点,则将c作为pp的左子节点插入,因此空(5)应填“p==pp->Lchild”。

第7题:

在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是()。

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

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

C、p->next=s;p->next->prior=s;s->prior=p;s->next=p->next;

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


参考答案:D

第8题:

在循环双链表的p所指的结点之前插入s所指结点的操作是()。

A.p->prior->prior

B.p->prior->prior

C.s->prior->next=s

D.s->prior->prior=s


正确答案:D

第9题:

在循环双链表的p结点之后插入s结点的操作是______。

A.p→next=s;p→next→prior=s;s→prior=p;s→next=p→next;

B.s→!next=p;s→next=p→next;p→next=s;p→next→prior=s;

C.p→next=s;s→prior=p;p→next→prior=s;s→next=p→next;

D.s→prior=p;s→next=p→next;p→next→prior=s;p→next=s;


正确答案:D

第10题:

设单链表中节点的结构为(data,link)。已知指针q所指节点是指针p所指节点的直接前驱,若在*q与*p之间插入节点*s,则应执行下列哪一个操作?

A.s↑.link:=p↑.link;p↑.link:=s

B.q↑.link:=s;s↑.link:=p

C.p↑.link:=s↑.link;s↑.link:=p

D.p↑.link:=s;s↑.link:=q


正确答案:B
解析:在单链表中两个节点之间插入一个新节点,要把前面节点的指针域指向新插入的节点(q↑.link=s),把新插入的节点的指针域指向后面的节点(s↑.link=p)。

更多相关问题