参考答案和解析
正确答案:p=L->next
更多“在带有头结点的双链表L中,指针p所指结点是第一个元素结点的条件是”相关问题
  • 第1题:

    阅读以下说明和 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

  • 第2题:

    阅读以下说明和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个元素所在结点*/

  • 第3题:

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


    答案:D
    解析:
    在双向循环链表中。在p所指的结点之后插入指针f所指的新结点的操作步骤为:改变f的前驱指针域,使其指向p;然后改变f的后继指针域,使其指向p的后继;接下来修改p的后继结点得前驱指针域,指向f,最后将f的地址付给p的后继指针。具体操作为:f—>pnor=p;f—>next=p—>next;p—>next—>prior=f;P—>next=f。

  • 第4题:

    在带有头结点的单链表HL中,要在首元元素之前插入一个由指针p指向的结点,则应执行p->next=HL->next及()操作。


    正确答案:HL->next=p

  • 第5题:

    在具有头结点的单链表中,头指针指向链表的第一个数据结点。


    正确答案:错误

  • 第6题:

    在单链表中,若要在指针P所指结点后插入指针S所指结点,则需要执行下列两条语句()和()。


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

  • 第7题:

    设有一个单向循环链表,结点的指针域为next,头指针为head,指针p指向表中某结点,若逻辑表达式()的结果为真,则p所指结点为尾结点。


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

  • 第8题:

    要在一个单向链表中删除p所指向的结点,已知q指向p所指结点的直接前驱结点,若链表中结点的指针域为next,则可执行()。


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

  • 第9题:

    填空题
    在带有头结点的双链表L中,指针p所指结点是第一个元素结点的条件是()。

    正确答案: p=L->next
    解析: 暂无解析

  • 第10题:

    填空题
    在单链表L中,指针p所指结点有后继结点的条件是()

    正确答案: p->next!=NULL
    解析: 暂无解析

  • 第11题:

    填空题
    在单链表L中,指针P所指的结点有后继结点的条件是()。

    正确答案: p->next!=NULL
    解析: 暂无解析

  • 第12题:

    填空题
    设有一个单向循环链表,结点的指针域为next,头指针为head,指针p指向表中某结点,若逻辑表达式()的结果为真,则p所指结点为尾结点。

    正确答案: p->next==head
    解析: 暂无解析

  • 第13题:

    在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是(50)。

    A.p=NULL

    B.P→next=NULL

    C.p=h

    D.p→next=h


    正确答案:D
    解析:此题是考查数据结构的链表知识。根据单向循环链表的定义和题中的答案,不难得出正确答案。因为.P=NULL,链表的节点是不能为空的,肯定错了;p->next=NULL,在最后一个指针为空的情况下,不能连成环,这是单向链表定义,所以错了;p=h,将头指针赋值给尾指针,显然也不正确,P就不是尾指针了。

  • 第14题:

    阅读以下说明和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

  • 第15题:

    在单链表L中,指针P所指的结点有后继结点的条件是()。


    正确答案:p->next!=NULL

  • 第16题:

    在带有头结点的双链表L中,指针p所指结点是第一个元素结点的条件是()。


    正确答案:p=L->next

  • 第17题:

    在带有头结点的双链表1中,指针P所指结点是第一个元素结点的条件是()。


    正确答案:p=L->next

  • 第18题:

    设有一个头指针为head的单向循环链表,p指向链表中的结点,若p->next=(),则p所指结点为尾结点。


    正确答案:head

  • 第19题:

    设有一个头指针为head的单向循环链表,p指向链表中的结点,若p->next==head,则p所指结点为()。


    正确答案:head

  • 第20题:

    在单链表L中,指针p所指结点有后继结点的条件是()


    正确答案:p->next!=NULL

  • 第21题:

    填空题
    在带有头结点的双链表1中,指针P所指结点是第一个元素结点的条件是()。

    正确答案: p=L->next
    解析: 暂无解析

  • 第22题:

    填空题
    设有一个头指针为head的单向循环链表,p指向链表中的结点,若p->next=(),则p所指结点为尾结点。

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

  • 第23题:

    填空题
    设有一个头指针为head的单向循环链表,p指向链表中的结点,若p->next==head,则p所指结点为()。

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

  • 第24题:

    填空题
    要在一个单向链表中删除p所指向的结点,已知q指向p所指结点的直接前驱结点,若链表中结点的指针域为next,则可执行()。

    正确答案: q->next=p->next
    解析: 暂无解析