1、链表都是线性数据结构;链表包括:单链表 双向链表 循环链表等。
2、在下列链表中不能从当前结点出发访问到其余各结点的是( )。
正确答案: C 你的答案: C (正确)
双向链表
单循环链表
单链表
双向循环链表
解析:只有单链表,是单向的。
3、在一个具有n个结点的有序单链表中插入一个新结点并保持该表有序的时间复杂度是_______。
正确答案: B 你的答案: B (正确)
O(1)
O(n)
O(n2)
O(log2n)
解析:需要先找到插入位置,也就是需要进行遍历一次O(n),在进行插入时的时间复杂度为O(1).
4、在需要经常查找结点的先驱与后继的场合中,使用( )比较合适。
正确答案: B 你的答案: B (正确)
单链表
双向链表
循环链表
链栈
5、下列链表中,其逻辑结构属于非线性结构的是()
正确答案: A 你的答案: A (正确)
二叉链表
循环链表
双向链表
带链的栈
解析:常见线性结构:线性表、栈、队列、双队列、串、数组
常见非线性结构:二维数组、多维数组、广义表、树(二叉树等
6、若建立以下链表结构,指针P,S分别指向如图所示结点
data next data next data next
则不能将S所指结点插入到链表末尾的语句组是?
正确答案: A 你的答案: C (错误)
p=p-> next; s->next=p;p-> next=s;
s->next= ‘\0’; p=p-> next; p-> next=s;
p=p-> next; s ->next=p-> next;p-> next=s;
p= ( *p ).next; ( * s ).next=( * p ).next; ( *p ).next=s;
7、10个数放入模10hash链表,最大长度是多少?
正确答案: B 你的答案: B (正确)
1
10
9
以上答案都不正确
8、对于一个头指针为L的带头结点的单链表,判定链表为空表的条件是()
正确答案: C 你的答案: B (错误)
L=NULL;
L->next=NULL;
L->next==NULL;
L!=NULL;
9、完成在双向循环链表结点 p 之后插入 s 的操作是()
正确答案: D 你的答案: B (错误)
p->next=s;s->prior=p;p->next->prior=s;s-next=p->next
p->next->prior=s;p->next=s;s->prior=p;s->next=p->next
s->prior=p;s->next=p->next;p->next=s;p->next->prior=s
s->prior=p;s->next=p->next;p->next->prior=s;p->next=s
10、对于双向循环链表,每个结点有两个指针域next和prior,分别指向前驱和后继。在p指针所指向的结点之后插入s指针所指结点的操作应为?
正确答案: D 你的答案: D (正确)
p->next = s; p->next ->prior = s;s ->prior = p; s->next = P->next;
s->prior = p; s->next = p ->next ; p ->next = s; p->next ->prior = s;
p ->next = s;s ->prior = p; p->next ->prior =s; s ->next = p ->next;
s->prior = p; s->next =p->next; p->next ->prior = s; p ->next = s;
11、在双向链表存储结构中,删除 p 所指的结点时须修改指针()
正确答案: A 你的答案: B (错误)
(p.llink).rlink:=p^.rlink (p.rlink).llink:=p^.llink;
p.llink:=(p.llink)^.llink (p.llink).rlink:=p;
(p.rlink).llink:=p p.rlink:=(p.rlink)^.rlink
p.rlink:=(p.llink)^.llink p.llink:=(p.rlink)^.rlink;
解析:p^.llink 表示 p 的前驱结点,p^.rlink表示 p 的后继结点。删除 p 所指结点时须将 p 的前驱结点的rlink指向 p 的后继结点,将 p 的后继结点的 llink 指向 p 的前驱结点。
12、对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应为()
正确答案: D 你的答案: D (正确)
p->right=s;s->left=p;p->right->left=s;s->right=p->right;
p->right=s;p->right->left=s;s->left=p;s->right=p->right;
s->left=p;s->right=p->right;p->right=s;p->right->left=s;
s->left=p;s->right=p->right;p->right->left=s;p->right=s;
解析:双向链表的插入顺序:先搞定插入节点的前驱和后继,在搞定后结点的前驱,最后搞定前结点的后继。
13、在一个长度为 n ( n>1 )的单链表上,设有头和尾两个指针,执行 操作与链表的长度有关。
正确答案: B 你的答案: B (正确)
删除单链表中的第一个元素
删除单链表中的最后一个元素
在单链表第一个元素前插入一个新元素
在单链表最后一个元素后插入一个新元素
14、下列叙述中,有关线性链表叙述正确的是()
正确答案: D 你的答案: B (错误)
线性链表中的表头元素一定存储在其他元素的前面
线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面
线性链表中的各元素在存储空间中的位置必须是连续的
线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的
15、线索二叉链表是利用()域存储后继结点的地址。
正确答案: C 你的答案: C (正确)
lchild
data
rchild
root
16、在具有 N 个顶点和 N 条边的无向图的邻接表存储中,邻接表中结点的总数为( )
正确答案: B 你的答案: B (正确)
N
2N
3N
4N
17、在包含1000个元素的线性表中实现如”下各运算,所需执行时间最长的是( )
正确答案: C 你的答案: A (错误)
线性表按顺序方式存储,删除线性表的第900个结点
线性表按链式方式存储,删除指针P所指向的结点
线性表按顺序方式存储,在线性表的第100个结点后面插入一个新结点
线性表按链式方式存储,在线性表的第100个结点后面插入一个新结点
解析:选C。
先看A和C项:
由于线性表采用的是顺序存储方式,用存储单元的邻接性体现线性表元素间的一维顺序关系,因此对线性表进行插入和删除运算时,可能需要移动大量的结点,以保持这种物理和逻辑的一致性。
对于选项A,删除线性表的第900个结点,后面的100个结点都要往前移动;
对于选项C,第100个结点后面插入一个新结点,后面的900个结点都要往后移动。
再看B和D项:
对于线性表按链接方式存储,当进行插入与删除操作时,只改变相应的指针即可。比顺序存储方式速度更快。
即B和D选项的执行时间较少。
所以比较4个选项的操作可易知,选项C所需要的执行时间最长。
18、广义表A=((x, (a ,b)), (x,(a,b),y)), 则运算Head(Head(Tail(A)))结果为( )
正确答案: A 你的答案: A (正确)
X
(a,b)
(x, (a,b))
A
解析“tail取值取值除了第一个元素之外的其他元素。
19、广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。那么广义表E((a,(a,b),((a,b),c)))的长度和深度分别为:
正确答案: B 你的答案: B (正确)
2和4
1和4
1和3
2和3”
20、将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( ).
正确答案: C 你的答案: D (错误)
0(1)
0(n)
0(m)
0(m+n)
解析:由于将长度为n的单链表链接在长度为m的单链表之后的操作,需要把长度为m的单链表遍历一遍,找到最后一个节点,所以时间复杂度为O(m)。
21、双循环链表中,任意一结点的后继指针均指向其逻辑后继。
正确答案: B 你的答案: A (错误)
T
F
解析:尾节点的后继指向头结点,而头结点不是尾节点的逻辑后继
22、当在链表中创建一个对链结点的引用时,它()
正确答案: D 你的答案: C (错误)
必须指向第一个链结点
必须指向current指向的链结点
必须指向next指向的链结点
可以指向任何链结点
23、若某线性表最常用的操作是在最后一个元素之后插入一个元素和删除进入表中的最后一个元素,则采用( )存储方式最节省运算时间和存储空间。
正确答案: C 你的答案: D (错误)
单链表
仅有头指针的单循环链表
双向链表
仅有尾指针的单循环链表
24、利用二叉链表存储树,则根结点的右指针是()
正确答案: C 你的答案: B (错误)
指向最左孩子
指向最右孩子
空
非空
解析:二叉链表: 左孩子右兄弟
根节点没有兄弟,所以为空
25、下面哪些不是链表的特征
正确答案: A C D 你的答案: A D (错误)
数据在内存中一定是连续的
插入或删除时,无需移动其它元素
可以随机访问表内的元素
需要事先估计存储空间
26、ArrayLists和LinkedList的区别,下述说法正确的有?
正确答案: A B C D 你的答案: A C D (错误)
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
27、关于单向链表,以下说法正确的有()
正确答案: A B C D 你的答案: A B D (错误)
单向链表中指向头结点的指针First,可用于单向链表的判空依据
单向链表中指向头结点的指针First,可用于定位所有其他结点的位置
单向链表插入,删除的时间复杂度小于查找的时间复杂度
单向链表允许在非表头进行插入或删除操作