第05讲 线性表的链式表示 课堂互动 显示答案 | 返回首页

作者:欧新宇(Xinyu OU)

最后更新:2023-09-14


【课前自测05】

1.(单选)线性表采用链式存储结构所具有的特点是()。
A. 所需空间地址必须不连
B. 需要事先估计所需存储空间
C. 可随机存取
D. 插入、删除操作不必移动元素

2.(单选)顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
A. 正确
B. 错误

3.(单选)对任何数据结构链式存储结构一定优于顺序存储结构。
A. 正确
B. 错误

4.(单选)为了很方便的插入和删除数据,可以使用双向链表存放数据。
A. 正确
B. 错误

5.(单选)线性表采用链表存储时,结点的存储空间可以是不连续的。
A. 正确
B. 错误

6.(单选)关于线性表的顺序存储结构和链式存储结构的描述中,正确的是( )。
I. 线性表的顺序存储结构优于其链式存储结构
II. 链式存储结构比顺序存储结构能更能方便地表示各种逻辑结构
III. 若频繁使用插入和删除结点操作,则顺序存储结构更由于链式存储结构
VI. 顺序存储结构和链式存结构都可以进行顺序存储

A. I、II、III
B. II、IV
C. II、III
D. III、IV

【课堂互动5.1】线性表的链式表示

‍1.(单选)在单链表中,增加一个头节点的目的是为了( )。
A. 使单链表至少有一个节点
B. 标识链表中某个重要节点的位置
C. 方便插入和删除运算的实现
D. 表示单链表是线性表的链式存储结构

2.(单选)已知表头元素为c的单链表在内存中的存储状态如下表所示。

地址 元素 链接地址
1000H a 1010H
1004H b 100CH
1008H c 1000H
100CH d Null
1010H e 1004H
1014H f -

现将 f 存放于1014H处并插入单链表,若 f 在逻辑上位于a和e之间,则 a,e,f 的链接地址分别为( )。
A. 1010H,1014H,1004H
B. 1010H,1004H,1014H
C. 1014H,1010H,1004H
D. 1014H,1004H,1010H


【课堂互动5.2】单链表

‍1.(单选)某算法在含有n(n≥1)个节点的单链表中查找值为x节点,其时间复杂度是( )。
A. O(log2n)O(log_2 n)
B. O(1)O(1)
C. O(n2)O(n^2)
D. O(n)O(n)

‍2.(单选)在长度为n(n≥1)的单链表中删除尾节点的时间复杂度为( )。
A. O(1)O(1)
B. O(log2n)O(log_2 n)
C. O(n)O(n)
D. O(n2)O(n^2)

3.(单选)​设线性表中有n个元素,以下运算中,( )在单链表上实现要比在顺序表上实现效率更高。
A. 删除指定位置元素的后一个元素
B. 在尾元素的后面插入一个新元素
C. 顺序输出前k个元素
D. 交换第i个元素和第n-i+1个元素的值(i=1,2,…,n)

‍4.(单选)以下关于单链表的叙述中正确的是( )。
‍Ⅰ.节点除自身信息外还包括指针域,存储密度小于顺序表‍
‍Ⅱ.找第i个节点的时间为O(1)‍
‍Ⅲ.在插入、删除运算时不必移动节点

A. 仅Ⅰ、Ⅱ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅰ、Ⅲ
D. Ⅰ、Ⅱ、Ⅲ

5.(单选)​长度为 n 的有序单链表中插入一个新结点,并仍然保持有序的时间复杂度为()。
A. O(1)O(1)
B. O(n)O(n)
C. O(n2)O(n^2)
D. O(nlog2n)O(nlog_2 n)

6.(单选)‌通过含有n(n≥1)个元素的数组a,采用头插法建立一个单链表L,则L中节点值的次序( )。
A. 与数组a的元素次序相同
B. 与数组a的元素次序相反
C. 与数组a的元素次序无关
D. 以上都不对


【课堂互动5.3】双向链表

1. 下面关于线性表的一些说法中,正确的是()。
A. 对一个设有头指针和尾指针的单链表执行删除最后一个元素的操作与链表长度无关
B. 线性表中每个元素都有一个直接前驱和一个直接后继
C. 为了方便插入和删除数据,可以使用双链表存放数据
D. 取线性表第 i 个元素的时间与 i 的大小有关

2. 在双链表中向p所指的结点之前插入一个结点q的操作为()。
A. p->prior = q; q->next = p; p->prior->next = q; q->prior = p->prior;
B. q->prior = p->prior; p->prior->next = q; q->next = p; p->prior = q->next;
C. q->next = p; p->next = q; q->prior->next = q; q->next = p;
D. p->prior ->next = q; q->next = p; q->prior = p->prior; p->prior = q

3. 在双向链表存储结构中,删除p所指的结点时必须修改指针()。
A. p->prior->next = p->next; p->next->prior = p->prior;
B. p->prior = p->prior->prior; p->prior->next = p;
C. p->next->prior = p; p->next = p->next->next;
D. p->next = p->prior->prior; p->prior = p->next->next;

4. 与单链表相比,双链表的优点之一是()。
A. 插入、删除操作更方便
B. 可以进行随机访问
C. 可以省略表头指针或表尾指针
D. 访问前后相邻结点更灵活

5. 带头结点的双循环链表L为空的条件是()。
A. L->prior == L && L->next == NULL
B. L->prior == NULL && L->next == NULL
C. L->prior == NULL && L->next == L
D. L->prior == L && L->next == L

【课堂互动5.4】循环链表

1. 已知一个带有表头结点的双向循环链表L,节点结构为[prev|data|next],其中prev和next分别指向其直接前驱和直接后继结点的指针,先要删除指针p所指的结点,正确的语句是:()。
A. p->next->prev = p->prev; p->prev->next = p->prev; free(p);
B. p->next->prev = p->next; p->prev->next = p->next; free(p);
C. p->next->prev = p->next; p->prev->next = p->prev; free(p);
D. p->next->prev = p->prev; p->prev->next = p->next; free(p);

2. 已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为[data|next],其中next是指向直接后继结点的指针,p是尾指针,q是临时指针。现要删除该链表的第一个元素,正确的语句序列是()。
A. h->next = h->next->next; q = h->next; free(q);
B. q = h->next; h->next = h->next->next; free(q);
C. q = h->next; h->next = q->next; if(p!=q) p = h; free(q);
D. q = h->next; h->next = q->next; if(p==q) p = h; free(q);

3. 一个链表最常用的操作是在末尾插入结点和删除结点,则选用()最节省时间。
A. 带头结点的双循环链表
B. 单循环链表
C. 带尾指针的单循环链表
D. 单链表

4. 设对 n(n>1) 个元素的线性表的运算只有4种:删除第一个元素;删除最后一个元素;在第一个元素之前插入新元素;在最后一个元素之后插入新元素,则最好使用()。
A. 只有尾结点指针没有头结点指针的循环单链表
B. 只有尾结点指针没有头结点指针的非循环双链表
C. 只有头结点指针没有尾结点指针的循环双链表
D. 既有头结点指针又有尾结点指针的循环单链表

5. 一个链表最常用的操作时在最后一个元素后插入一个元素和删除一个元素,则选用()最节省时间。
A. 不带头结点的单循环链表
B. 双链表
C. 不带头结点且有尾指针的单循环链表
D. 单链表


【课堂互动5.5】广义表和多重链表

1.(单选)广义表((a,b,c,d))的表尾是()。
A. a
B. ()
C. (a,b,c,d)
D. (b,c,d)

2.(单选)设广义表 L=((a,b,c)),则L的长度和深度分别为()。
A. 1和1
B. 1和3
C. 1和2
D. 2和3

3.(单选)设广义表L=(a,b,L),其深度是()。
A. 2
B. 3
C. 正无穷
D. 都不对

4.(单选)已知广义表A=((a,(b,c)), (a,(b,c),d)),则运算GetHead(GetHead(GetTail(A)))的结果是()。
A. a
B. (b,c)
C. (a, (b,c))
D. ()

5.(单选)设广义表 L=(a,b,(c,d),(e,(f,g))),则运算GetHead(GetTail(GetHead(GetTail(GetTail(L)))))的结果是()。
A. d
B. (d)
C. (e)
D. a


【扩展练习05】

1. 对于一个线性表,既要求能够进行较快速地插入和删除,又要求存储结构能反映数据之间的逻辑关系,则应该用()。
A. 顺序存储方式
B. 链式存储方式
C. 散列存储方式
D. 以上均可以

2. 对于顺序存储的线性表,其算法时间复杂度为O(1)的运算应该是()。
A. 将 n 个元素从小到大排序
B. 删除第 i 个元素
C. 改变第 i 个元素的值
D. 在第 i 个元素后插入一个新元素

3. 设线性表中有2n个元素,()在单链表上实现要比在顺序表上实现效率更高。
A. 删除所有值为x的元素
B. 在最后一个元素的后面插入一个新元素
C. 顺序输出前k个元素
D. 交换第i个元素和第2n-i-1个元素的值(i=0,...,n-1)

4. 在一个单链表中,已知q所指结点时p所指结点的前驱结点,若在q和p之间插入结点s,则执行()
A. s->next = p; p->next = s;
B. p->next = s->next; s->next = p;
C. q->next = s; s->next = p
D. p->next = s; s->next = q;

5. 给定有n个元素的一维数组,建立一个由单链表的最低时间复杂度是()。
A. O(1)O(1)
B. O(n)O(n)
C. O(n2)O(n^2)
D. O(nlog2n)O(nlog_2 n)

6. 将长度尾n的单链表链接在长度为m的单链表后面,其算法的时间复杂度采用大O形式表示应该是()。
A. O(1)O(1)
B. O(n)O(n)
C. O(m)O(m)
D. O(n+m)O(n+m)

7. 在一个长度为n的带头结点的单链表h上,设有尾指针r,则执行()操作与链表的表长有关。
A. 删除单链表中的第一个元素
B. 删除单链表中的最后一个元素
C. 在单链表第一个元素前插入一个新元素
D. 在单链表最后一个元素后插入一个新元素

8. 对于一个头结点为head的带头结点的单链表,判定该表为空表的条件是()。
A. head == NULL
B. head->next == NULL
C. head->next == head
D. head != NULL

9. 对于一个不带头结点的单链表,判定空表的条件为()。
A. head == NULL
B. head->next == NULL
C. head->next == head
D. head != NULL

第05讲 线性表的链式表示 课堂互动 显示答案 | 返回首页