在一个双链表中,在*p节点(非尾节点)之后插入一个节点*s的操作是()。A.s->prior=p;p->next=s; p->next->prior=s;s->next=p->next;B.s->next=p->next;p->next->prior=s;p->next=s;s->prior=p;C.p->next=s;s->prior=p;s->next=p->next; p->next->prior=s;D.p->prior=s; s->next=p; s->next->prior=p; p->nex

题目

在一个双链表中,在*p节点(非尾节点)之后插入一个节点*s的操作是()。

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

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

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

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


相似考题
更多“在一个双链表中,在*p节点(非尾节点)之后插入一个节点*s的操作是()。”相关问题
  • 第1题:

    在一个单链表中,若要删除p节点的后续节点,则执行

    A.p↑.next:=p↑.next↑.next;

    B.p:=p↑.next;p↑.next:=p↑.next↑.next;

    C.flee(p↑.next);

    D.p:=p↑.next↑.next;


    正确答案:A
    解析:在一个单链表中,若要删除p节点的后续节点,只要将p的指针域指向p的后继的后继即可,即p↑.next=p↑.next↑.next。

  • 第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题:

    在双链表中,每个节点有两个指针域,一个指向前驱节点,另一个指向【 】。


    正确答案:后续节点(后继节点)
    后续节点(后继节点) 解析:链式存储结构的节点中,只有一个指示直接后继的指针域。因此从某个点出发,只能顺指针往后寻查其他节点。若要寻查节点的直接前驱,则需要从表头指针出发,影响查找效率。为了克服单链表这种单向性的缺点,可利用双向链表。双向链表的节点中,有两个指针域,其一指向直接后继,另一个指向直接前驱。

  • 第4题:

    若某链表最常用的操作是在最后一个节点之后插入一个节点和删除最后一个节点,则采用______存储方式最节省时间。

    A.单链表

    B.双链表

    C.单循环链表

    D.带头节点的双循环链表


    正确答案:D

  • 第5题:

    在单链表中,增加头节点的目的是

    A.方便运算的实现

    B.使单链表至少有一个节点

    C.标识表节点中首节点的位置

    D.说明单链表是线性表的链式存储实现


    正确答案:A
    解析:头节点不仅标识了表中首节点的位置,而且根据单链表(包含头节点) 的结构,只要掌握了表头,就能够访问整个链表,因此增加头节点的目的是为了便于运算的实现。

  • 第6题:

    在循环双链表的p节点之后插As节点的操作是______。

    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

  • 第7题:

    双链表的每个节点包括两个指针域。其中rlink指向节点的后继,llink指向节点的前驱。如果要在p所指节点后插入q所指的新节点,下面哪一个操作序列是正确的?

    A.p↑.rlink↑.llink:=q;p↑.rlink:=q;q↑.llink:=p;q↑.rlink:=p↑,rlink;

    B.p↑.llink↑.rlink:=q;p↑.llink:=q;q↑.rlink:=p;q↑.llink:=p↑.llink;

    C.q↑.llink:=p;q↑.rlink:=p↑.rlink;p↑.rlink↑.llink:=q;p↑.rlink:=q↑;

    D.q↑.rlink:=p;q↑.llink:=p↑.llink;p↑.1link↑.rlink:=q;p↑.llink:=q;


    正确答案:C
    解析:在双链表中,如果要在P所指节点后插入q所指的新节点,只需修改P所指节点的rlink字段和原后继的llink字段,并置q所指节点的llink和rlink值。即:
      q↑.llink:=p;q↑.rlink:=p↑.rlink;p↑.rlink↑.rlink:=q;p↑.rlink:=q。

  • 第8题:

    在一个双链表中,包括头结点在内共有6个节点,则共有 【】 个指针。


    正确答案:10
    头结点和尾节点都只有一个指针,其他的节点是4个指针,所以共有10个指针

  • 第9题:

    单向链表的每一个节点都有一个指向它的后续节点的指针link,现有节点p和q,节点q在节点p的前面,要删除节点p,正确的操作应该是

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

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

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

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


    正确答案:A
    解析:单向链表删除运算只要将q的指针link指向p的后继即可:q↑.link:=p↑.link。

  • 第10题:

    设指针变量p指向双向链表中节点A,指针变量s指向被插入的节点X,则在节点A的后面插入节点X的操作序列为()

    A.p->right=s;s->left=p;p->right->left=s;s->right=p->right;
    B.p->right=s;p->right->left=s;s->left=p;s->right=p->right;
    C.s->left=p;s->right=p->right;p->right=s;p->right->left=s;
    D.s->left=p;s->right=p->right;p->right->left=s;p->right=s;

    答案:D
    解析:
    为了防止在插入节点时链表断裂,在修改指针时,需要先使s的后继指针指向p原来的后继节点,然后修改p的后继指针。

  • 第11题:

    若在单向链表上,除访问链表中所有节点外,还需在表尾频繁插入节点,那么采用()最节省时间。

    • A、仅设尾指针的单向链表
    • B、仅设头指针的单向链表
    • C、仪设尾指针的单向循环链表
    • D、仅设头指针的单向循环链表

    正确答案:C

  • 第12题:

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


    正确答案:p->next=s;

  • 第13题:

    阅读下列函数说明和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”。

  • 第14题:

    有n个节点的单链表中,算法的时间复杂度是O(1)的操作是()

    A、访问第i个节点(1≤i≤n)

    B、在第i个节点后插入一个新节点(1≤i≤n)

    C、访问值为x的节点

    D、将n个节点从小到大排序


    参考答案:B

  • 第15题:

    循环链表的主要优点是(44)。

    A.已知某个节点的位置后,能很容易找到它的直接前驱节点

    B.在进行删除操作后,能保证链表不断开

    C.从表中任意节点出发都能遍历整个链表

    D.不再需要头、尾指针


    正确答案:C
    解析:链表是用连续(或不连续)的存储单元存储数据元素,元素之间的逻辑关系用“指针”指明。链表具体分为以下几种形式。1)单向链表中节点包含一个指针,指明其直接前驱(或后继)元素节点:2)双向链表中节点包含两个指针,分别指明其直接前驱和直接后继元素节点;3)循环链表是最后节点的指针指向头节点,它可在任何位置上沿指针遍历整个链表。

  • 第16题:

    在一个单链表中,若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
    解析:在单链表中插入一个元素需要执行以下步骤:首先将待插入节点的前驱节点的指针域指向待插入节点,然后将待插入节点的指针域指向待插入节点的前驱节点原先的后继节点。

  • 第17题:

    设单链表中节点的结构为(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)。

  • 第18题:

    单链表的每个节点中包括一个指针link,它指向该节点的后继节点。现要将指针q指向的新节点插入到指针p指向的单链表节点之后,下面的操作序列中哪一个是正确的? ______。

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

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

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

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


    正确答案:C

  • 第19题:

    单键表的每个节点中包括一个指针link,它指向该节点的后继节点。现要将指针q指向的新节点插入到指针p指向的单链表节点之后,下面的操作序列中哪一个是正确的?______。

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

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

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

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


    正确答案:C

  • 第20题:

    单向链表的每一个节点都有一个指向它的后续节点的指针link,现有节点P和q,要将q插入节点p的后面,正确的操作应该是

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

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

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

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


    正确答案:A
    解析:单向链表插入运算的关键步骤为:q↑.link:=p↑.link; p↑.link:=q;

  • 第21题:

    在循环双链表的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

  • 第22题:

    设一个有序的单链表中有n个节点,现要求插入一个新节点后使得单链表仍然保持有序,则该操作的时间复杂度为()。


    答案:C
    解析:
    对单链表进行插入节点的操作,就是对单链表进行查找,找到节点需要插入的位置,然后修改指针,将节点插入单链表。

  • 第23题:

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


    正确答案:s->next=p->next;

  • 第24题:

    *p之后插入节点*s的操作是()

    • A、p->next=s;s->next=p->next;
    • B、s->next=p-next;p->next=s;
    • C、p=s->next;s=p->next;
    • D、s=p->next;p=s->next;

    正确答案:B