#JC1054. 链表进阶

链表进阶

一、单项选择题(每题2分,共20分)

1、单链表结点结构体中,next指针存放的是?() {{ select(1) }}

  • 本结点的数据值
  • 下一个结点的地址
  • 上一个结点的地址
  • 链表头结点地址

2、C++结构体指针访问成员使用哪个运算符?() {{ select(2) }}

  • .
  • ->
  • *
  • &

3、双向链表结点,用来保存前驱结点地址的指针名称是?() {{ select(3) }}

  • next
  • data
  • prev
  • head

4、单链表中间位置插入新结点s,p指向插入位置的前一个结点,正确操作顺序是?() {{ select(4) }}

  • s->next = p->next; p->next = s;
  • p->next = s; s->next = p->next;
  • s = p; p->next = s;
  • p->next = s; p = s;

5、双向链表,在p指向的结点之后插入s结点,下面正确一组操作是?() {{ select(5) }}

  • s->next = p->next; p->next->prev = s; s->prev = p; p->next = s;
  • p->next = s; s->prev = p; s->next = p->next; p->next->prev = s;
  • s->prev=p; p->next=s; s->next=p->next; p->next->prev=s;
  • p->next->prev=s; s->next=p->next; p->next=s; s->prev=p;

6、双向链表删除p指向的中间结点(前后结点都不为空),正确操作是?() {{ select(6) }}

  • p->prev->next = p->next; p->next->prev = p->prev;
  • p->next = NULL; p->prev = NULL;
  • delete p;
  • head = p->next;

7、C++中动态开辟结点内存使用哪个关键字?() {{ select(7) }}

  • static
  • new
  • delete
  • struct

8、动态创建单链表,将新结点s插入到链表头部,newNode为新结点,head为头指针,正确代码是?() {{ select(8) }}

  • newNode->next = head; head = newNode;
  • head->next = newNode;
  • newNode = head; head->next = NULL;
  • head = newNode; newNode->next = NULL;

9、双向链表想要倒序遍历输出全部数据,遍历指针p初始应该指向哪里?() {{ select(9) }}

  • head(首结点)
  • NULL
  • 尾结点tail
  • 任意中间结点

10、相比于数组,链表做频繁插入、删除操作的主要优势是?() {{ select(10) }}

  • 随机下标访问速度更快
  • 只修改相邻指针,不需要大量移动数据
  • 占用内存一定比数组小
  • 代码写法更简单

二、判断题(每题2分,共10分)

11、单链表结点内存地址在内存中一定是连续的。() {{ select(11) }}

  • 正确
  • 错误

12、双向链表每个结点同时拥有next后继指针和prev前驱指针。() {{ select(12) }}

  • 正确
  • 错误

13、.点运算符用于结构体普通变量访问成员;->用于结构体指针访问成员。() {{ select(13) }}

  • 正确
  • 错误

14、双向链表中间插入结点时,可以先修改p‑>prev,再读取p‑>prev‑>next,不会出现逻辑错误。() {{ select(14) }}

  • 正确
  • 错误

15、静态创建链表:程序运行过程中使用new运算符动态申请结点。() {{ select(15) }}

  • 正确
  • 错误