1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-02-08 05:14:48 +08:00
Files
CS408/Data-Structrue/1-linear-list-ex.md
2021-09-15 23:47:38 +08:00

2.5 KiB
Raw Permalink Blame History

线性表习题

基本概念

例题 以下()是一个线性表。

$A.$由$n$个实数组成的集合

$B.$由$100$个字符组成的序列

$C.$所有整数组成的序列

$D.$邻接表

解:$B$。线性表定义的要求为:相同数据类型、有限序列。选项$C$的元素个数是无穷个,错误;选项$A$集合中的元素没有前后驱关系,错误;选项$D$属于存储结构,线性表是一种逻辑结构,不要将二者混为一谈。只有选项$B$符合线性表定义的要求。

顺序表

例题 设线性表有$n$个元素,严格说来,以下操作中,()在顺序表上实现要比在链表上实现的效率高。

.输出第$i$$1\leqslant i\leqslant n$)个元素值。

Ⅱ.交换第$3$个元素与第$4$个元素的值

Ⅲ.顺序输出这$n$个元素的值

$A.$

$B.$Ⅰ、Ⅲ

$C.$Ⅰ、Ⅱ

$D.$Ⅱ、Ⅲ

解:$C$。对于Ⅱ,顺序表仅需$3$次交换操作;链表则需要分别找到两个结点前驱,第$4$个结点断链后再插入到第$2$个结点后,效率较低。对于Ⅲ,需依次顺序访问每个元素,时间复杂度相同。

链表

结构选择

例题 一个链表最常用的操作是在末尾插入结点和删除结点,则选用()最节省时间。

$A.$带头结点的双循环链表

$B.$单循环链表

$C.$带尾指针的单循环链表

$D.$单链表

解:$A$。首先分析要求。末尾删除和插入结点,则需要对尾部操作。$B$是循环链表,但是方向是头结点到尾部,如果操作尾部需要$O(n)$的时间。$C$带了尾指针,所以可以对尾指针直接插入元素,但是不能删除尾指针所指向的最后一个元素,因为是单链表,所以不能找到尾指针的前驱。$D$单链表只能从头开始找,所以不合适。对于$A$。虽然它是带头结点,但是是循环链表,所以头节点的前驱就是尾结点,且是双链表,所以可以向前。若是删除尾结点直接删除头节点的前驱,同理插入尾节点,直接对头节点的前驱操作。

链表逻辑

例题 某线性表用带头结点的循环单链表存储,头指针为head,当 head->next->next=head成立时,线性表长度可能是()。

A.0

B.1

C.2

$D.$可能为$0$或1

解:$D$。这个题目很容易就会选择$B$。对于$B$,若是有一个元素,则$head->next$就指向该元素,该元素后面没有了,就指向头节点从而head->next->next=head。若元素有$0$个,则head->next=head,则head->next->next=head->next=head,所以也成立。