题目
下列说法正确的是_____A 分配给单链表[1]的内存单元地址必须是连续的B 与顺序表[2]相比,在链表[3]中顺序访问所有节点,其算法的效率比较低。C 从长度 n 的顺序表中删除任何一个元素,时间复杂度都是 O ( 1 ) 。D 向顺序表中插人一个元素,平均要移动大约一半的元素。
下列说法正确的是_____
A 分配给单链表[1]的内存单元地址必须是连续的
B 与顺序表[2]相比,在链表[3]中顺序访问所有节点,其算法的效率比较低。
C 从长度 n 的顺序表中删除任何一个元素,时间复杂度都是 O ( 1 ) 。
D 向顺序表中插人一个元素,平均要移动大约一半的元素。
题目解答
答案
答案是:B和D
A 分配给单链表的内存单元地址必须是连续的:这是错误的说法。链表的节点可以在内存中的任意位置,不要求连续。
B 与顺序表相比,在链表中顺序访问所有节点,其算法的效率比较低。在链表中,要访问一个节点,需要从头节点开始逐个遍历,直到找到目标节点。这是因为链表的节点在内存中并不是连续存储的,每个节点都需要通过指针来连接下一个节点。而在顺序表中,元素在内存中是连续存储的,可以通过索引直接访问。因此,顺序表在顺序访问所有节点时的效率要高于链表。
C 从长度 n 的顺序表中删除任何一个元素,时间复杂度都是 O(1):这是错误的说法。在顺序表中删除一个元素时,需要将后续的元素依次向前移动,因此删除操作的时间复杂度为O(n)。
D 向顺序表中插入一个元素,平均要移动大约一半的元素:这是正确的说法。在顺序表中插入一个元素时,如果插入位置在中间位置,需要将插入位置及其后面的元素向后移动,平均需要移动一半的元素。因此,插入操作的平均时间复杂度为O(n/2),即O(n)。
综上所述,本题选B和D。
解析
步骤 1:分析选项A
单链表的节点在内存中可以是不连续的,因为每个节点通过指针连接,所以分配给单链表的内存单元地址不必是连续的。
步骤 2:分析选项B
在链表中,要访问一个节点,需要从头节点开始逐个遍历,直到找到目标节点。这是因为链表的节点在内存中并不是连续存储的,每个节点都需要通过指针来连接下一个节点。而在顺序表中,元素在内存中是连续存储的,可以通过索引直接访问。因此,顺序表在顺序访问所有节点时的效率要高于链表。
步骤 3:分析选项C
在顺序表中删除一个元素时,需要将后续的元素依次向前移动,因此删除操作的时间复杂度为O(n)。
步骤 4:分析选项D
在顺序表中插入一个元素时,如果插入位置在中间位置,需要将插入位置及其后面的元素向后移动,平均需要移动一半的元素。因此,插入操作的平均时间复杂度为O(n/2),即O(n)。
单链表的节点在内存中可以是不连续的,因为每个节点通过指针连接,所以分配给单链表的内存单元地址不必是连续的。
步骤 2:分析选项B
在链表中,要访问一个节点,需要从头节点开始逐个遍历,直到找到目标节点。这是因为链表的节点在内存中并不是连续存储的,每个节点都需要通过指针来连接下一个节点。而在顺序表中,元素在内存中是连续存储的,可以通过索引直接访问。因此,顺序表在顺序访问所有节点时的效率要高于链表。
步骤 3:分析选项C
在顺序表中删除一个元素时,需要将后续的元素依次向前移动,因此删除操作的时间复杂度为O(n)。
步骤 4:分析选项D
在顺序表中插入一个元素时,如果插入位置在中间位置,需要将插入位置及其后面的元素向后移动,平均需要移动一半的元素。因此,插入操作的平均时间复杂度为O(n/2),即O(n)。