#6011. 结构体指针与链表专项练习1
结构体指针与链表专项练习1
一、选择题(共15题,每题2分)
- 关于结构体嵌套,以下说法正确的是:{{ select(1) }}
- 结构体不能包含自身类型的成员
- 结构体可以包含指向自身类型的指针
- 嵌套结构体的成员访问只能使用一级点运算符
- 结构体嵌套层次不能超过3层
- 给定结构体定义:
以下初始化方法正确的是:{{ select(2) }}struct Date { int year, month, day; }; struct Student { string name; Date birthday; } stu;
Student stu = {"Tom", {2000, 1, 1}};Student stu = {"Tom", 2000, 1, 1};Student stu = {name:"Tom", birthday:{2000,1,1}};Student stu = (name="Tom", birthday=(2000,1,1));
- 关于结构体指针声明,正确的是:{{ select(3) }}
struct Student *p;Student p*;pointer Student p;*Student p;
- 访问结构体指针的成员,正确方式是:{{ select(4) }}
p->namep.name*p.name&p->name
- 循环双链表的头节点指针为
head,判断链表为空的表达式是:{{ select(5) }}
head == NULLhead->next == NULLhead->next == headhead == NULL && head->next == NULL
- 在循环双链表中,遍历所有节点的循环条件通常是:{{ select(6) }}
p != NULLp != headp->next != NULLp->next != head
- 在循环双链表节点
p之后插入节点s,错误的操作顺序是:{{ select(7) }}
s->next = p->next; p->next->prev = s; p->next = s; s->prev = p;p->next = s; s->prev = p; s->next = p->next; p->next->prev = s;s->prev = p; s->next = p->next; p->next->prev = s; p->next = s;p->next->prev = s; s->prev = p; s->next = p->next; p->next = s;
- 删除循环双链表中的节点
p(非头节点),正确操作是:{{ select(8) }}
p->prev->next = p->next; p->next->prev = p->prev;p->next = p->prev; p->prev = p->next;delete p; p->prev->next = p->next;p->prev = p->next; p->next = p->prev;
- 以下哪种不是结构体初始化的合法方式:{{ select(9) }}
Student stu = {};Student stu = {"Alice", 18};Student stu("Bob", 19);Student stu { "Charlie", 20 };
- 在循环双链表中查找值为
val的节点,若找到返回节点指针,否则返回NULL,以下函数头正确的是:{{ select(10) }}
Node* search(Node* head, int val)Node search(Node head, int val)int search(Node* head, int val)bool search(Node* head, int val)
- 关于结构体指针的动态内存分配,正确的是:{{ select(11) }}
Student *p = new Student;Student p = new Student;Student *p = malloc(Student);Student p = (Student*)malloc(sizeof(Student));
- 循环双链表中,节点定义如下:
在只有头指针struct Node { int data; Node *prev, *next; };head的情况下,要在表尾插入节点s,需要:{{ select(12) }}
head->prev->next = s; s->prev = head->prev; s->next = head; head->prev = s;head->next = s; s->prev = head; s->next = head;Node *p = head; while(p->next != head) p=p->next;然后插入- 无法在表尾插入
- 对于已初始化的结构体变量
stu,以下访问成员方式错误的是:{{ select(13) }}
stu.name(&stu)->name*(&stu).name(*(&stu)).name
- 循环双链表的节点
p是头节点,要删除头节点后的第一个节点,需要:{{ select(14) }}
- 先判断链表是否只有头节点
- 直接删除
p->next - 不需要判断,直接操作
- 必须先找到尾节点
- 关于结构体数组的初始化,正确的是:{{ select(15) }}
Student stu[2] = {{"Tom",18},{"Jerry",19}};Student stu[2] = {"Tom",18,"Jerry",19};Student[2] stu = {{"Tom",18},{"Jerry",19}};Student stu[2] = {Tom,18,Jerry,19};
二、判断题(共10题,每题2分)
- 结构体可以包含其他结构体类型的成员,但不能包含自身类型的成员。{{ select(16) }}
- 正确
- 错误
- 使用
Student *p = new Student;创建结构体对象后,可以使用p.name访问成员。{{ select(17) }}
- 正确
- 错误
- 在C++中,定义结构体变量时可以省略
struct关键字。{{ select(18) }}
- 正确
- 错误
- 循环双链表的优点是可以从任意节点出发遍历整个链表。{{ select(19) }}
- 正确
- 错误
- 在循环双链表中,头节点的
prev指针总是指向最后一个节点。{{ select(20) }}
- 正确
- 错误
- 删除循环双链表节点时,不需要考虑被删除节点是否是头节点。{{ select(21) }}
- 正确
- 错误
- 结构体变量可以在定义时使用
Student stu = {"John"}进行初始化,未指定的成员会被初始化为0。{{ select(22) }}
- 正确
- 错误
- 在循环双链表中查找元素,平均时间复杂度是
O(n)。{{ select(23) }}
- 正确
- 错误
- 结构体指针变量必须使用
->运算符访问成员,不能使用.运算符。{{ select(24) }}
- 正确
- 错误
- 循环双链表的插入操作只需要修改两个指针。{{ select(25) }}
- 正确
- 错误