更多“下列是在具有头结点单向链表中删除第i个结点的算法,请在空格内填上适当的语句。 <img src="http://img.ppkao.com/2018-07/yiyu/2018072509045110625.bmp">”相关问题
  • 第1题:

    在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。A.访问第i个结点(1<=i<=n)和求第i个结点

    在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。

    A.访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)

    B.在第i个结点之后插入一个新结点(1<=i<=n)

    C.删除第i个结点(1<=i<=n)

    D.将n个结点从小到大排序


    正确答案:A

  • 第2题:

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

  • 第3题:

    在具有n个结点的单链表中,实现()的操作,其算法的时间复杂度都是O(n)。

    A.遍历链表和求链表的第i个结点
    B.在地址为P的结点之后插入一个结点
    C.删除开始结点
    D.删除地址为P的结点的后继结点

    答案:A
    解析:
    A项,由于单链表是非随机存取的存储结构,遍历链表和求链表的第i个结点都必须从头指针出发寻找,其时间复杂度为0(n);B项,由于已知待插入结点的前驱结点,可以直接实现插入,其时间复杂度为0(1);CD两项,可以直接实现删除操作,其时间复杂度为O(1)。

  • 第4题:

    以下函数在head为头指针的具有头结点的单向链表中删除第i个结点,完成程序中空格部分。
    jnext;q->next;q->next;p

  • 第5题:

    下列是在具有头结点单向列表中在第i个结点之前插入新结点的算法,请在空格内填上适当的语句。
    (NODE *)malloc(sizeof(NODE));p->next=q->next;q->next=p

  • 第6题:

    在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。

    • A、访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
    • B、在第i个结点后插入一个新结点(1≤i≤n)
    • C、删除第i个结点(1≤i≤n)
    • D、将n个结点从小到大排序

    正确答案:A

  • 第7题:

    设有一个单向链表,结点的指针域为next,头指针为head,p指向尾结点,为了使该单向链表改为单向循环链表,可用语句()。


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

  • 第8题:

    设有一个不带头结点的单向链表,头指针为head,结点类型为NODE,每个结点包含一个数据域data和一个指针域next,该链表有两个结点,p指向第二个结点(尾结点),按以下要求写出相应语句。删除链表的第一个结点。


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

  • 第9题:

    单选题
    在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。
    A

    访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)

    B

    在第i个结点后插入一个新结点(1≤i≤n)

    C

    删除第i个结点(1≤i≤n)

    D

    将n个结点从小到大排序


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

  • 第10题:

    填空题
    要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head->next;()。

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

  • 第11题:

    问答题
    设有一个不带头结点的单向链表,头指针为head,结点类型为NODE,每个结点包含一个数据域data和一个指针域next,该链表有两个结点,p指向第二个结点(尾结点),按以下要求写出相应语句。删除链表的第一个结点。

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

  • 第12题:

    单选题
    在n个结点的线性表的数组实现中,算法的时间复杂度是O(1)的操作是()。
    A

    访问第i(1<=i<=n)个结点和求第i个结点的直接前驱(1<i<=n)

    B

    在第i(1<=i<=n)个结点后插入一个新结点

    C

    删除第i(1<=i<=n)个结点

    D

    以上都不对


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

  • 第13题:

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

    该程序段实现的功能是( )。

    A.首结点成为尾结点

    B.尾结点成为首结点

    C.删除首结点

    D.删除尾结点


    正确答案:A
    循环找到末尾结点,然后赋值给第一个结点,所以选择A)。

  • 第14题:

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

  • 第15题:

    下列是用头插法建立带头结点的且有n个结点的单向链表的算法,请在空格内填上适当的语句。
    head=p;q=p;p->next=NULL;p->next=q->next;q->next=p

  • 第16题:

    下列是用尾插法建立带头结点的且有n个结点的单向链表的算法,请在空格内填上适当的语句。
    p->data=i;p->next=NULL;q->next=p;q=p

  • 第17题:

    以下函数在head为头指针的具有头结点的单向链表中删除第1个结点,补充程序。
    (1)j(2)q=q->next
    (3)q->next
    (4)q->next
    (5)p

  • 第18题:

    设有一个单向循环链表,头指针为head,链表中结点的指针域为next,p指向尾结点的直接前驱结点,若要删除尾结点,得到一个新的单向循环链表,可执行操作()。


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

  • 第19题:

    要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head->next;()。


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

  • 第20题:

    在n个结点的线性表的数组实现中,算法的时间复杂度是O(1)的操作是()。

    • A、访问第i(1<=i<=n)个结点和求第i个结点的直接前驱(1<i<=n)
    • B、在第i(1<=i<=n)个结点后插入一个新结点
    • C、删除第i(1<=i<=n)个结点
    • D、以上都不对

    正确答案:A

  • 第21题:

    单选题
    设有头指针为head的带有头结点的非空单向循环链表,指针p指向其尾结点,要删除头结点,并使其仍为单向循环链表,则可利用下述语句head =head->next ;()。
    A

    p=head;

    B

    p=NULL;

    C

    p->next=head;

    D

    head=p;


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

  • 第22题:

    填空题
    设有一个单向循环链表,头指针为head,链表中结点的指针域为next,p指向尾结点的直接前驱结点,若要删除尾结点,得到一个新的单向循环链表,可执行操作()。

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

  • 第23题:

    填空题
    设有一个单向链表,结点的指针域为next,头指针为head,p指向尾结点,为了使该单向链表改为单向循环链表,可用语句()。

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