https://www.cnblogs.com/longhai3/longhai

数据结构>>链式存储结构习题

Posted on 2022-02-12 22:20  凡是过去,皆为序曲  阅读(476)  评论(0编辑  收藏  举报

【2-1-1】带头结点的单链表L为空的判定条件是(      )。

A.L==NULL      B.L->next==NULL       C.L->next==L       D.L!=NULL

【2-1-2】对于一个具有n个元素的线性表,建立其单链表的时间复杂度为(      )。

A.O(log2n)             B.O(1)            C.O(n^2)              D.O(n)

【2-1-3】在单链表中查找指定值的结点的时间复杂度是(      )。

A.O(log2n)                B.O(1)               C.O(n^2)              D.O(n)

【2-1-4】以下关于单链表的叙述中,不正确的是(      )。

A.结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构

B.逻辑上相邻的元素物理上不必相邻

C.可以通过头结点直接计算第i个结点的存储地址

D.插入、删除运算操作方便,不必移动结点

【2-1-5】在单链表中,增加一个头结点的目的是为了(      )。

A.使单链表至少有一个结点

B.标识链表中重要结点的位置

C.方便运算的实现

D.说明单链表是线性表的链式存储结构

2-1-6在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是(      )。

A.O(1)           B.O(n)           C.O(n^2)          D.O(nlog2n)

2-1-7将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度是(      )。

A.O(1)           B.O(n)           C.O(m)          D.O(m+n)

2-1-8已知一个长度为n的单链表中所有结点是递增有序的,以下叙述中正确的是(  )。

A.插入一个结点使之有序的算法的时间复杂度为O(1)

B.删除最大值结点使之有序的算法的时间复杂度为O(1)

C.找最小值结点的算法的时间复杂度为O(1)

D.以上都不对

  1. 【2-2】下面算法的功能是:删除单链表L中第一个值为x的结点。请在空白处填入正确的语句。
  2.  
  3. int delx(LinkList &L, ElemType x)
  4. {
  5.     LinkList pre = L, ______①______;      //pre 指向p 的前驱结点
  6.     while(p != NULL && p->data != x) {
  7.         ______②_______;
  8.         p = p->next;           //pre、 p 同步后移一个结点
  9.     }
  10. if(p != NULL) {    //找到值为 x的p结点
  11. _________③________;
  12. _________④_________;
  13. return 1;
  14. }
  15. else
  16. return 0; //未找到值为 x 的结点

17.}

 

 

p=pre->next

pre=p

pre->next=p->next

free(p)

 

 

  1. 【2-3】下面算法的功能是:删除单链表L含两个或两个以上的数据结点中第一个值为x的结点的前驱结点。请在空白处填入正确的语句。
  2.  
  3. int delfirstx(LinkList &L, ElemType x)
  4. {
  5.     LinkList  prepre = L, pre = prepre->next, p;
  6.     if(_______①________)
  7.         return 0;
  8.     p = _______②________;
  9.     while(p != NULL && ________③______) {      // 找到值为x结点
  10.         ________④_______;
  11.         pre = p;
  12.         p = p->next;           //prepre、 pre、 p 同步后移一个结点
  13.     }
  14.     if(p != NULL) {            // 找到值为 x的p 结点
  15.         prepre->next = p;             //删除pre 结点
  16.         _______⑤________;           //释放pre 结点空间
  17.         return 1;                      //成功删除返回 1
  18.     }
  19.     else
  20.         return 0;          //未找到值为 x 的结点, 返回 0
  21. }

 

 

pre->data==x

pre->next

p->data!=x

prepre=pre

free(pre)

 

 

  1. 【2-4】下面算法的功能是:判定单链表L是否是递增的。请在空白处填入正确的语句。
  2.  
  3. int increase(LinkList L)
  4. {
  5.     LinkList ______①_____, p;         //pre 指向第一个数据结点
  6.     p = pre->next;             //p 指向pre 结点的后继结点
  7.     while (______②_____) {
  8.         if (p->data >= pre->data) { //若正序则继续判断下一个结点
  9.             ______③______;                  //pre、 p 同步后移
  10.             _______④________;
  11.         }
  12.         else
  13. ________⑤_________;
  14.     }
  15.     return 1;
  16. }

pre=L->next

p!=NULL

p=p->next

pre=pre->next

return 0

 

 

随心,随记

https://www.cnblogs.com/w1hg/331817