## 链表
2-11
(neuDS)在单链表中,增加一个头结点的最终目的是为了(2 )。
使单链表至少有一个结点
方便运算的实现
标识表结点中首结点的位置
说明单链表是线性表的链式存储
2-10
将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( 2)。
O(1)
O(m)
O(n)
O(n+m)
要插入到长度为m的单链表,需要找到表尾,这个过程的时间复杂度为o(m),连接的时间复杂度为o(1),所以总的时间复杂度为o(m)
2-12
在单链表中,要删除某一指定结点,必须先找到该结点的(1)。
直接前驱
自身位置
直接后继
直接后继的后继
2-1
设h为不带头结点的单向链表。在h的头上插入一个新结点t的语句是:4
h=t; t->next=h->next;
t->next=h->next; h=t;
h=t; t->next=h;
t->next=h; h=t;
2-2
在单链表中,若p所指的结点不是最后结点,在p之后插入s所指结点,则执行 2
s->next=p; p->next=s;
s->next=p->next; p=s;
s->next=p->next; p->next=s;
p->next=s; s->next=p;
2-18
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是(2)。
可以加快对表的遍历
使空表和非空表的处理统一
节省存储空间
可以提高存取表元素的速度
2-1
对于一非空的循环单链表,h和p分别指向链表的头、尾结点,则有:1
p->next == h
p->next == NULL
p == NULL
p == h
2-2
在双向循环链表结点p之后插入s的语句是: 4
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;
2-3
在双向链表存储结构中,删除p所指的结点,相应语句为:3
p->prior=p->prior->prior; p->prior->next=p;
p->next->prior=p; p->next=p->next->next;
p->prior->next=p->next; p->next->prior=p->prior;
p->next=p->prior->prior; p->prior=p->next->next;
2-4
某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间? 2
单链表
仅有尾指针的单循环链表
仅有头指针的单循环链表
双链表
2-5
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间? 4
单链表
双链表
单循环链表
带头结点的双循环链表
2-6
将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?
3
单链表
单循环链表
带尾指针的单循环链表
带头结点的双循环链表
2-7
(neuDS)在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用()存储方式。 3
顺序表
用头指针标识的循环单链表