更多“在单链表中,要取得某个元素,只要知道该元素所在结点的地址即可,因”相关问题
  • 第1题:

    阅读以下说明和C语言函数,将应填入(n)。

    【说明】

    已知包含头结点(不存储元素)的单链表的元素已经按照非递减方式排序,函数 compress(NODE*head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。

    处理过程中,当元素重复出现时,保留元素第一次出现所在的结点。

    图2-1(a)、(b)是经函数compress()处理前后的链表结构示例图。

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

    typedef struct Node{

    int data;

    struct Node *next;

    }NODE;

    【C语言函数】

    void compress(NODE *head)

    { NODE *ptr,*q;

    ptr= (1); /*取得第一个元素结点的指针*/

    while( (2)&& ptr->next) {

    q=ptr->next;

    while(q&&(3)) { /*处理重复元素*/

    (4)q->next;

    free(q);

    q=ptr->next;

    }

    (5) ptr->next;

    }/*end of while */

    }/*end of compress*/


    正确答案:(1)head->next (2)ptr (3)q->data == ptr->data 或ptr->next->data==ptr->data或其等价表示 (4)ptr->next (5)ptr
    (1)head->next (2)ptr (3)q->data == ptr->data 或ptr->next->data==ptr->data,或其等价表示 (4)ptr->next (5)ptr 解析:本题考查基本程序设计能力。
    链表上的查找、插入和删除运算是常见的考点。本题要求去掉链表中的重复元素,使得链表中的元素互不相同,显然是对链表进行查找和删除操作。
    对于元素已经按照非递减方式排序的单链表,删除其中重复的元素,可以采用两种思路。
    1.顺序地遍历链表,对于逻辑上相邻的两个元素,比较它们是否相同,若相同,则删除后一个元素的结点,直到表尾。代码如下:
    ptr=head->next;/*取得第一个元素结点的指针*/
    while(ptr && ptr->next){ /*指针ptr指示出重复序列的第一个元素结点*/
    q=ptr->next;
    while(q && ptr->data==q->data){/*处理重复元素*/
    ptr->next=q->next;/*将结点从链表中删除*/
    free(q);
    q=ptr->next; /*继续扫描后继元素*/
    }
    ptr=ptr->next;
    }
    2.对于每一组重复元素,先找到其中的第一个结点,然后向后查找,直到出现一个相异元素时为止,此时保留重复元素的第一个结点,其余结点则从链表中删除。
    ptr=head->next;/*取得第一个元素结点的指针*/
    while(ptr && ptr->next){/*指针ptr指示出重复序列的第一个元素结点*/
    q=ptr->next;
    while(q && ptr->data==q->data) /*查找重复元素*/
    q=q->next;
    s=ptr->next; /*需要删除的第一个结点*/
    ptr->next=q; /*保留重复序列的第一个结点,将其余结点从链表中删除*/
    while(s && s!=q}{/*逐个释放被删除结点的空间*/
    t = s->next;free(s);s = t;
    }
    ptr=ptr->next;
    }
    题目中采用的是第一种思路。

  • 第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(n>1)的带头结点单链表h上,另设有尾指针r(指向尾结点)。与链表的长度有关的操作是()。

    A.删除单链表中的第一个元素
    B.删除单链表中的最后一个元素
    C.在单链表第一个元素前插入一个新元素
    D.在单链表最后一个元素后插入一个新元素

    答案:B
    解析:
    在单链表中要删除最后一个元素必须找到尾结点的前驱结点的指针。由于单链表只能访问结点的下一个结点,所以根据尾指针不能够直接找到它的前驱结点,只有从头开始依次向下找到尾结点的前驱结点。所以删除单链表中的最后一个元素与链表的长度有关。

  • 第4题:

    在单链表中,若给定某个结点的数据信息,要删除该结点的后继结点的时间复杂度为()。


    正确答案:O(n)

  • 第5题:

    在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。


    正确答案:错误

  • 第6题:

    在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有相同的()

    • A、行号
    • B、列号
    • C、元素值
    • D、地址

    正确答案:A

  • 第7题:

    广义表单链表示法,其中字段link存放与本元素同层的下一个元素所对应结点的地址,当本元素是所在层的最后一个元素时,link=NULL。


    正确答案:正确

  • 第8题:

    在单链表中,要访问某个结点,只要知道该结点的地址即可;因此,单链表是一种随机存取结构。


    正确答案:错误

  • 第9题:

    判断题
    在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
    A

    B


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

  • 第10题:

    判断题
    在单链表中,要访问某个结点,只要知道该结点的指针即可;因此,单链表是一种随机存储结构。
    A

    B


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

  • 第11题:

    判断题
    在单链表中,要取得某个元素,只要知道该元素所在结点的地址即可,因此单链表是随机存取结构。
    A

    B


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

  • 第12题:

    填空题
    在线性表的单链表存储中,若一个元素所在结点地址为p,则其后继结点的地址为()

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

  • 第13题:

    若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。

    A.采用不含头结点的单链表且栈顶元素放在表尾结点B.采用不含头结点的单链表且栈顶元素放在表头结点C.采用含头结点的单循环链表且栈顶元素随机存放在链表的任意结点D.采用含头结点的双向链表且栈顶元素放在表尾结点


    正确答案:B

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

    若要将一个单链表中的元素倒置,可以借助()建立单链表的思想将链表中的结点重新放置。


    正确答案:头插法

  • 第16题:

    在单链表中,若给定某个结点的指针,要删除该结点的后继结点的时间复杂度为()。


    正确答案:O(1)

  • 第17题:

    在单链表中,任何两个元素的存储位置之间都有固定的联系,因为可以从头结点查找任何一个元素。


    正确答案:错误

  • 第18题:

    在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。

    • A、删除单链表中的第一个元素
    • B、删除单链表中的最后一个元素
    • C、在单链表第一个元素前插入一个新元素
    • D、在单链表最后一个元素后插入一个新元素

    正确答案:B

  • 第19题:

    在线性表的单链表存储中,若一个元素所在结点地址为p,则其后继结点的地址为()


    正确答案:p->next

  • 第20题:

    在单链表中,要访问某个结点,只要知道该结点的指针即可;因此,单链表是一种随机存储结构。


    正确答案:错误

  • 第21题:

    填空题
    若要将一个单链表中的元素倒置,可以借助()建立单链表的思想将链表中的结点重新放置。

    正确答案: 头插法
    解析: 暂无解析

  • 第22题:

    判断题
    在单链表中,要访问某个结点,只要知道该结点的地址即可;因此,单链表是一种随机存取结构。
    A

    B


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

  • 第23题:

    判断题
    广义表单链表示法,其中字段link存放与本元素同层的下一个元素所对应结点的地址,当本元素是所在层的最后一个元素时,link=NULL。
    A

    B


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