#CSPJDSR01. CSP-J 数据结构|R01 结构体、指针与单链表

CSP-J 数据结构|R01 结构体、指针与单链表

CSP-J 数据结构|R01 结构体、指针与单链表

训练重点: 结构体成员访问、指针解引用、头结点、链表插入删除、时间复杂度

每题只有一个正确选项。建议按 CSP 初赛方式独立完成,程序阅读题必须在草稿纸上逐步模拟。

第 1 题

已知 student a; student *p=&a;,下列能正确给成员 score 赋值为 90 的写法是( )。

{{ select(1) }}

  • a->score=90;
  • p.score=90;
  • p->score=90;
  • *p.score=90;

第 2 题

执行下面代码后,x 的值是( )。

int x=7;
int *p=&x;
*p=12;

{{ select(2) }}

  • 7
  • 12
  • x 的地址
  • 无法确定

第 3 题

在“带头结点”的单链表中,若 head 指向头结点,则空链表通常用哪一个条件判断?

{{ select(3) }}

  • head==nullptr
  • head->next==nullptr
  • head->data==0
  • head->next==head

第 4 题

普通单链表中,访问第 k 个结点通常需要的时间复杂度是( )。

{{ select(4) }}

  • O(1)
  • O(log n)
  • O(n)
  • O(n^2)

第 5 题

已知 p 指向结点 A,A 后面原来是 B。现在要在 A 后插入新结点 s,正确顺序是( )。

{{ select(5) }}

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

第 6 题

已知 pre 指向待删除结点 p 的前驱,删除 p 的关键语句应是( )。

{{ select(6) }}

  • p=p->next;
  • pre=p;
  • pre->next=p->next;
  • p->next=pre;

第 7 题

执行 delete p; 后,下列说法正确的是( )。

{{ select(7) }}

  • 可以继续访问 p->data
  • 可以继续访问 p->next
  • p 一定自动变成 nullptr
  • 不应再通过 p 访问被释放对象

第 8 题

执行下面代码后,a 和 b 的值分别是( )。

int a=3,b=8;
int *p=&a;
*p=5;
p=&b;
*p=10;

{{ select(8) }}

  • 3 和 8
  • 5 和 8
  • 3 和 10
  • 5 和 10

第 9 题

设链表为 10 -> 20 -> 30 -> 40 -> nullptr,p 指向值为 20 的结点。执行 p->next = p->next->next; 后,从 head 开始的链表是( )。

{{ select(9) }}

  • 10 -> 20 -> 30 -> 40
  • 10 -> 20 -> 40
  • 10 -> 30 -> 40
  • 20 -> 30 -> 40

第 10 题

若已知某个链表结点 p 的地址,要在 p 后插入一个新结点,除动态申请结点外,核心指针修改次数是常数次,因此该操作的时间复杂度是( )。

{{ select(10) }}

  • O(1)
  • O(log n)
  • O(n)
  • 与链表长度平方成正比

作答要求

  • 栈题:画清 栈底 / 栈顶。
  • 队列题:标清 队首 / 队尾。
  • 循环队列:每次移动都写出取模后的下标。
  • 链表题:逐句修改 next 箭头,不要只靠心算。
  • STL 题:特别注意函数是否会改变容器内容。