【无标题】

在长度为 n 的顺序表下标为 i 的位置前插入一个元素(1 ≤ i ≤ n+1),元素的移动次数为( )

A.n - i + 1

B.n - i

C.i

D.i - 1

答案:B

解析:顺序表插入元素,需要移动元素,这里需要把[i, n - 1]区间的元素全部向后移动一次,故移动的次数为n - 1 - i + 1


下列关于链表的说法哪个是正确的?( )

A.插入或删除时,无需移动其他元素

B.数据在内存中一定是连续的

C.需要事先估计存储空间

D.可以随机访问表内的元素

答案:A

解析:链表插入删除元素只需要修改指针指向,不需要移动元素。

链表是用指针链接前后节点,数据在内存中不一定连续

每次插入元素,都是先出开一个节点的空间,不需要事先估计存储空间

并且链表没有索引,不能随机访问。


在单链表指针为p的结点之后插入指针为s的结点,正确的操作是( )

A.p->next=s; s->next=p->next;

B.p->next=s->next; p->next=s;

C.s->next=p->next; p->next=s;

D.p->next=s->next; p->next=s;

答案:C

解析:先把s和p的next节点链接,再更新p的next为s(s先指向别人)


在长度为n(n>1)的单链表上,设有头和尾两个指针,执行( )操作与链表的长度有关。

A.在单链表第一个元素前插入一个新元素

B.在单链表最后一个元素后插入一个新元素

C.删除单链表中的第一个元素

D.删除单链表中的最后一个元素

答案:D

解析:此题有尾指针,所以尾插不需要找尾,但尾删需要尾结点和尾结点前一个节点(命名为prev),所以此题尾删还需要遍历单链表(循环次数为n-1找尾)找到prev。A选项为头插,不需要遍历链表,B选项为尾插,也不需要遍历链表,C选项为头删,不需要遍历链表,只有D选项,为尾删,需要遍历单链表,找到尾节点的前一个节点。所以与长度有关。


在一个循环双向链表中,要在p所指的节点之前插入s所指节点,以下代码正确的执行次序是( )

①`p->prev->next=s;

②`p->prev=s;

③`s->prev=p->prev;

④`s->next=p;

A.④③①②

B.④③②①

C.②①④③

D.②①③④

A

s先和p、p的prev建立联系,s先指向它俩

p的prev再指向s,p的再指向s


关于链表和顺序表间的区别,叙述错误的是( )

A.链表和顺序表都属于线性表

B.链表不能随机访问其中的某个元素,顺序表可以

C.链表能做的事,顺序表都可以完成,只是操作方法不同,效率不同

D.链表在进行插入和删除的时候,速度总是比顺序表快

答案:D

解析:链表的插入和删除不是所有情况下都比顺序表快,比如尾插尾删(链表的尾插尾删需要找尾,尾删还要找两个节点),顺序表的时间复杂度为O(1),并且如果是单链表,如果要在中间某个节点的前面插入/删除一个节点,则需要遍历。所以时间的快慢要分情况看待。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值