以下算法是删除带头结点单链表L中的最小的元素,横线处应填入的语句是()。 void DelMinNode(LinkList L) { p=L->next; pre=L; if(L==NULL) return; while(p->next!=NULL) //pre指向最小元素的前驱元素,开始默认第一个结点最小,pre指向头结点 { if(p->next->data < pre->next->data) pre=p; } //删除pre后面的结点 p=pre->next; ; }A.free(p); pre-

题目

以下算法是删除带头结点单链表L中的最小的元素,横线处应填入的语句是()。 void DelMinNode(LinkList L) { p=L->next; pre=L; if(L==NULL) return; while(p->next!=NULL) //pre指向最小元素的前驱元素,开始默认第一个结点最小,pre指向头结点 { if(p->next->data < pre->next->data) pre=p; } //删除pre后面的结点 p=pre->next; ; }

A.free(p); pre->next=p->next;

B.free(p->next);pre->next=p->next;

C.pre->next=p->next; free(p);

D.p->next=pre->next;free(p);


相似考题
更多“以下算法是删除带头结点单链表L中的最小的元素,横线处应填入的语句是()。 void DelMinNode(LinkList L) { p=L->next; pre=L; if(L==NULL) return; while(p->next!=NULL) //pre指向最小元素的前驱元素,开始默认第一个结点最小,pre指向头结点 { if(p->next->data < pre->next->data) pre=p; } //删除pre后面的结点 p=pre->next; ; }”相关问题
  • 第1题:

    程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针向链表的第—个结点。

    若有以下程序段 q=s; s=s->next; p=s; while(p->next) p=p->next; P->next=q; q->next=NULL; 该程序段实现的功能是______。

    A.首结点成为尾结点

    B.尾结点成为首结点

    C.删除首结点

    D.删除尾结点


    正确答案:A
    解析:根据语句q=s得知指针q指向结点a;由s=s->next;p=s得知指针p和s均指向接点b;在满足while语句的情况下,抽行p=p->next;得知p现在指向结点c;由p->next=q得知p指向的结点是a,a移到c的后面;由q->next=NULL得知结点a与结点b的指针断开。移动后的结构图如图所示:

  • 第2题:

    在一个单链表中,若删除p所指向结点的后续结点,则执行()。

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

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

    C、p=p->next;

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


    参考答案:A

  • 第3题:

    p指向线性链表中某一结点,则在线性链表的表尾插入结点s的语句序列是()。

    A.while(p->next!=NULL)p=p->next;p->next=s;s->next=NULL;

    B.while(p!=NULL)p=p->next;p->next=s;s->next=NULL;

    C.while(p->next!=NULL)p=p->next;s->next=p;p->next=NULL;

    D.while(p!=NULL)p=p->next->next;p->next=s;s->next=p->next;


    正确答案:A

  • 第4题:

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

    [说明1]

    L为一个带头结点的循环链表。函数LinkList deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于C的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。

    [C函数1]

    LinkList deletenode(LinkList L,int c)

    {LinkList Lc,P,pre;

    pre=L;

    p=(1);

    Lc=(LinkList)malloc(sizeof(Listnode));

    Lc->next=Lc;

    while(P!=L)

    if(p->data>C){

    (2);

    (3);

    Lc->next=p;

    p=pre->next;

    }

    else{

    pre=p;

    p=pre->next;

    }

    return Lc;

    }

    [说明2]

    递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成k(2≤k≤9)进制数,并打印。

    [C函数2]

    dec to k 2(int n,int k)

    { if(n!=O){

    dec to k 2( (4) ,k);

    printf("%d", (5) );

    }

    }


    正确答案:(1) pre->next或L->next (2) pre->neXt=p->next (3) p->next=Lc->next (4) n/k (5) n%k
    (1) pre->next或L->next (2) pre->neXt=p->next (3) p->next=Lc->next (4) n/k (5) n%k 解析:函数1是考察链表的删除和插入的操作。(1)空所在语句是对指针P赋初值,应填“pre->next”或“L->next”,通过下面的程序可以判断指针pre所指的结点是指针p所指结点前驱结点。(2)、(3)空所在的语句块是处理当指针p所指的结点是一个大于C的结点,则将该结点从链表L中删除,再将它插入到链表Lc中。分别填“pre->next=p->next”和“p->next=-Lc->next”。
    函数2是一个递归函数,采用除k取余法。最开始得到余数作为k进制数的最低位,最后得到的余数作为k进制数的最高位。用递归法求解时,先将n/k转换成k进制,再输出n%k。因此(4)填“n/k”,(5)填“n%k”。

  • 第5题:

    在单链表中,指针p指向元素为x的结点,下面哪条语句实现“删除x的后继”? ( )

    A.p=p->next

    B.p->next=p->next->next

    C.p->next=p

    D.p=p->next->next


    正确答案:B
    解析:在单链表中删除元素的后继,也就是要断掉该元素与后继元素的联系,同时让该元素后继的后继成为该元素的后继。

  • 第6题:

    设指针变量p指向单链表中的结点A,则删去结点A的语句序列为 Q=p->next;p->data = p->data: p->next=(); :feee(q);


    正确答案:q->next

  • 第7题:

    阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    [说明]
    函数GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。
    函数DelListElem(LinkList L,int i,ElemType *e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。
    例如,某含头结点单链表L如下图(a)所示,删除第3个元素结点后的单链表如下图(b)所示。
    1.jpg

    #define SUCCESS 0 #define ERROR -1 typedef intStatus; typedef intElemType;

    链表的结点类型定义如下:

    typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList; [C代码] LinkListGetListElemPtr(LinkList L,int i) { /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点; 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if(i<1 || !L || !L->next) return NULL; k=1; p=L->next; /*令p指向第1个元素所在结点*/ while(p &&______){ /*查找第i个元素所在结点*/ ______; ++k; } return p; } StatusDelListElem(LinkList L,int i,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令P指向第i个元素的前驱结点*/ if(i==1) ______; else p=GetListElemPtr(L,i-1); if(!P || !p->next) return ERROR; /*不存在第i个元素*/ q=______; /*令q指向待删除的结点*/ p->next=q->next; //从链表中删除结点*/ ______; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }


    答案:
    解析:
    k<i
    p=p->next
    p=L
    p->next
    *e=q->data


    【解析】

    本题考查C语言的指针应用和运算逻辑。
    本问题的图和代码中的注释可提供完成操作的主要信息,在充分理解链表概念的基础上填充空缺的代码。
    函数GetListElemPtr(LinkList L,int i)的功能是在L为头指针的链表中查找第i个元素,若找到,则返回指向该结点的指针,否则返回空指针。描述查找过程的代码如下,其中k用于对元素结点进行计数。

    k=1; p=L->next; /*令p指向第1个元素所在结点*/

  • 第8题:

    在一个带头结点的循环双向链表中,若要删除指针p所指向的结点则执行()嗓作。

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

    正确答案:D

  • 第9题:

    设单链表中指针p指向结点a,若要删除p之后的结点(若存在),则需修改指针的操作为()。

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

    正确答案:A

  • 第10题:

    已知指针P指向键表L中的某结点,执行语句P=P-〉next不会删除该链表中的结点。


    正确答案:正确

  • 第11题:

    单选题
    在一个单链表中,若要删除p指针所指向结点的后继结点,则执行()
    A

    p->next=p

    B

    p=p->next->next

    C

    p->next=p->next->next

    D

    p=p->next;p->next=p->next->next


    正确答案: A
    解析: 假设q为p指针所指向的结点的后继结点,则q=p->next,若要删除q,应将q的链域q->next的值传给p指针的链域p->next,即p->next=p->next->next。

  • 第12题:

    单选题
    设单链表中指针p指向结点a,若要删除p之后的结点(若存在),则需修改指针的操作为()。
    A

    p->next=p->next->next

    B

    p=p->next

    C

    p=p->next->next

    D

    next=p


    正确答案: A
    解析: 暂无解析

  • 第13题:

    在单链表中,指针p指向元素为x的结点,实现删除x节点的后继结点的语句是()。

    A、p=p->next;

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

    C、p->next=p;

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


    参考答案:D

  • 第14题:

    设线性链表中结点的结构为(data,next)。若想删除结点p的直接后继,则应执行下列()操作。

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

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

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

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


    正确答案:A

  • 第15题:

    函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空includestruc

    函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空

    include <stdio.h>

    struct node

    { int data;

    struct node *next;

    };

    int min(struct node *first)/*指针first为链表头指针*/

    { struct node *p; int m;

    p=first->next; re=p->data; p=p->next;

    for( ;p!=NULL;p=【 】)

    if(p->data<m ) re=p->data;

    return m;

    }


    正确答案:p->next
    p->next 解析:本题考查的知识点是:链表的筛选。题目要求筛选出链表中最小的值,所以需要先定义一个临时变量,并将第1个值赋给该变量,就好像本题程序中定义的变量 m。然后遍历整个链表,拿链表中的每一个值跟m比较,如果找到比m小的值,就让m等于该值,这样遍历结束后,m中就是该链表的最小值了。题目中的空位于for循环的第3个表达式处,这里的for循环就是用来遍历整个链表的,所以该表达式需要完成的任务是:将循环变量p指向当前结点的下一个结点。故不难得知应填p->next。

  • 第16题:

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

    【说明2.1】

    L为一个带头结点的循环链表。函数deletenode(LinkList L, int c)的功能是删除L中数据域data的值大于c的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。

    【函数2.1】

    LinkList deletenode(LinkList L, int c)

    {

    LinkList Lc,p,pre;

    pre=L;

    p=(1);

    Lc=(LinkList)malloc(sizeof(ListNode) );

    Lc->next=Lc

    while(p!=L)

    if(p->data>c)

    {

    (2);

    (3);

    Lc->next=p;

    p=pre->next;

    }

    else

    {

    pre=p;

    p=pre->next;

    }

    return Lc;

    }

    【说明2.2】

    递归函数dec_to_k_2(int n, int k)的功能是将十进制正整数n转换成k<2≤k≤9)进制数,并打印。

    【函数2.2】

    dec_to_k_2(int n, int k)

    { /*将十进制正整数n转换成k(2≤k≤9)进制数*/

    if(n!=0)

    {

    dec_to_k_2((4),k);

    printf("%d",(5));

    }

    }


    正确答案:(1)pre->next或L->next (2)pre->next=p->next (3)p->next=Lc->next (4) n/k (5)n% k
    (1)pre->next或L->next (2)pre->next=p->next (3)p->next=Lc->next (4) n/k (5)n% k 解析:这一题共有两个函数,第一个函数是考查链表的删除和插入操作,第二个函数是考查递归函数。
    先看第一个函数。(1)空所在语句是对指针p赋初值,通过下面的程序可以判断指针pre所指的结点是指针p所指的结点前驱结点,因此 (1)空处应填写“pre->next”或“L->next”。(2)、(3)空所在的语句块是处理当指针p所指的结点是一个大于c的结点,则将该结点从链表L中删除,再将它插入到链表Lc中。由指针pre和指针p的关系,从链表中删除指针p所指结点很简单,只需将指针pre的next域修改为指针p的next域即可,因此(2)空处应填写“pre->next=P->next”或其等价形式。将指针p所指的结点插入到链表Lc的过程是,先将指针P的next域指向指针Lc的next所指的结点,再将指针Lc的next指向指针p所指的结点。因此(3)空处应填写“p->next=Lc->next”或其等价形式。
    再来分析第二个函数。将十进制正整数转换成k进制数,采用除 k取余法。最开始得到余数作为k进制数的最低位,最后得到的余数作为k进制数的最高位。用n不断地除以k,直到商为0。转换所得到的k进制数是从低位开始生成,而输出则应该从高位开始。根据这一特点,用递归法求解时,先应将n/k转换成k进制,再输出n%k。因此 (4)空、(5)空处分别填写“n/k”、“n% k。当然这个问题也可以通过非递归的算法来完成,这样在转换过程中,需要一个栈来暂存n除以k所得到的各位余数。

  • 第17题:

    阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 4-1 (a) 所示,删除第 3 个元素结点后的单链表如 图 4-1 (b) 所示。图4-1

    define SUCCESS 0 define ERROR -1 typedef int Status; typedef int ElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node ,*LinkList; 【C 代码】 LinkList GetListElemPtr(LinkList L ,int i) { /* L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点: 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if (i<1 ∣∣ !L ∣∣ !L->next) return NULL; k = 1; P = L->next; / *令p指向第1个元素所在结点*/ while (p && (1) ) { /*查找第i个元素所在结点*/ (2) ; ++k; } return p; } Status DelListElem(LinkList L ,int i ,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令p指向第i个元素的前驱结点*/ if (i==1) (3) ; else p = GetListElemPtr(L ,i-1); if (!p ∣∣ !p->next) return ERROR; /*不存在第i个元素*/ q = (4) ; /*令q指向待删除的结点*/ p->next = q->next; /*从链表中删除结点*/ (5) ; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }


    正确答案:(1) k<i
    (2) p = p->next
    (3) p=L
    (4) p->next
    (5) *e = q->data

  • 第18题:

    在一个单链表中,若要删除P结点的后续结点,则应执行()。

    A.P->next=P->next->next
    B.p=P->next;P->next=P->next->next
    C.delete(P->next)
    D.p=P->next->next

    答案:A
    解析:
    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。在一个单链表中,若要删除P结点的后续结点,则只需将P节点的后续节点指针指向邻接节点的下一个节点,即指向下下个节点,p->next=p->next->next,因此本题答案为A选项。

  • 第19题:

    阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。
    [说明]
    函数ReverseList(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成:已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。
    例如,某单链表如图1所示,逆置过程中指针s的变化情况如图2所示。

    链表结点类型定义如下:

    typedef struct Node{ int data; Struct Node *next; }Node,*LinkList; [C函数] void ReverseList(LinkList headptr) { //含头结点的单链表就地逆置,headptr为头指针 LinkList p,s; if(______) return; //空链表(仅有头结点)时无需处理 P=______; //令P指向第一个元素结点 if(!P->next) return; //链表中仅有一个元素结点时无需处理 s=p->next; //s指向第二个元素结点 ______ =NULL; //设置第一个元素结点的指针域为空 while(s){ p=s; //令p指向未处理链表的第一个结点 s= ______; p->next=headptr->next; //将p所指结点插入已完成部分的表头 headptr->next= ______; } }


    答案:
    解析:
    !headptr->next,或!headptr||!headptr->next,或其等价形式
    headptr->next
    headptr->next->next,或p->next,或其等价形式
    s->next,或p->next, 或其等价形式
    p

  • 第20题:

    设rear是指向非空带头结点的循环单链表的尾指针,则在起始结点之前插入指针p所指结点的操作可表示为()

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

    正确答案:C

  • 第21题:

    在一个单链表中,若要删除p指针所指向结点的后继结点,则执行()

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

    正确答案:C

  • 第22题:

    下列算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同,试完成该算法。 void DelSameNode(LinkList L) //L是带头结点的单链表,删除其中的值重复的结点// {ListNode * p,*q,*r; p=L->next; //p初始指向开始结点// while(p){ //处理当前结点p// q=p; r=q->next; do { //删除与结点*p的值相同的结点// while(r&&r->data!=p->data){ q=r; r=r->next; } if(r){ //结点*r的值与*p的值相同,删除*r// q->next=r->next; free(r); r=(); } }while( r ); p=p->next; } }


    正确答案:q->next

  • 第23题:

    单选题
    设rear是指向非空带头结点的循环单链表的尾指针,则在起始结点之前插入指针p所指结点的操作可表示为()
    A

     p->next = rear->next->next; rear->next = p

    B

     p->next = rear->next;  rear->next->next = p

    C

     p->next = rear->next->next; rear->next->next = p

    D

     p->next = rear->next->next; rear->next->next = p->next


    正确答案: C
    解析: 暂无解析

  • 第24题:

    单选题
    在一个带头结点的循环双向链表中,若要删除指针p所指向的结点则执行()嗓作。
    A

    p = p->prior;p->prior->next = p->next

    B

    p->prior->next = p;p->next = p->next->prior

    C

    p->next->prior = p;p->next = p->next->next

    D

    p->prior->next = p->next;p->next->prior = p->prior


    正确答案: C
    解析: 暂无解析