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

解析:
尾结点的前驱不知道

如果最常用的操作是取第i个结点及其前驱,则采用()存储方式最节省时间。
正确答案:D
单链表
双链表
单循环链表
顺序表

解析:
如顺序表的每个结点占用lenlenlen个内存单元,用location(ki)location (ki)location(ki)表示顺序表中第i个结点ki所占内存空间的第1个单元的地址。则有如下的关系:
location(ki+1)=location(ki)+lenlocation (ki+1) = location (ki) +lenlocation(ki+1)=location(ki)+len
location(ki)=location(k1)+(i−1)lenlocation (ki) = location(k1) + (i-1)lenlocation(ki)=location(k1)+(i1)len

已知两个长度分别为m 和 n 的升序链表,若将它们合并为一个长度为 m+n 的降序链表,则最坏情况下的时间复杂度是( )。
题目有问题
O(n)
O(m+n)
O(min(m ,n))
O(max(m,n))

解析:
如果从移动次数的角度上去理解,那么因为是两个升序表merge成一个降序表,所以采用头插法,因此两表中的所有节点必须一个一个地链接到结果表中,这样的话,任何情况下都需要移动m+n个元素。因此,最好、最坏都是O(m+n)O(m+n)O(m+n)

如果从比较次数的角度上去理解,有
最多比较次数,m+n−1m+n-1m+n1
最少比较次数,min(m,n)min(m,n)min(m,n)
那么,
最坏是O(max(m,n))O(max(m,n))O(max(mn)) (有O(m+n)O(m+n)O(m+n)等价于O(max(m,n))O(max(m,n))O(max(mn))
最好是O(min(m,n))O(min(m,n))O(min(m,n))

下列程序段的时间复杂度是
count = 0;
for(k=1;k<n;k*=2)
 for(j=0;j<n;j++)
  count++;
答案:
O(nlogn)

解析:
外层循环的时间复杂度是O(logn)O(logn)O(logn),内层循环的时间复杂度是O(n)O(n)O(n)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐