牛客刷题错题总结收集(格式为知识点-题干-解释或者知识点-具体知识点的解释)秋招看看复习下!

题目涉及知识范围有数据结构和算法、计算机网络、操作系统、数据库、机器学习、Linux等。

每篇更新十个知识点,接下来会随着本人刷题记录持续更新!这是第三篇

今天是链表专题复习!

 

链表有单链表、双链表、循环链表、静态链表等几种形式

静态链表是一维数组+伪指针(记录当前元素的直接后继在数组中的位置)

知识点:链表

向一个有 127 个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 个元素()
63.5 解释:

插入为n / 2

删除为(n-1)/ 2

查找为(n+1)/ 2

 

知识点:链表

有一个单向链表,头指针和尾指针分别为p,q,以下哪项操作的复杂度不受队列长度的影响?

删除头部元素、头部元素之前插入一个元素、尾部元素之后插入一个元素 (删除尾部元素是有影响的!)

 

知识点:链表

设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度()

O(n)(而不是O(1)) 解释:首先要找插入位置,由于单链表不能像顺序表那样二分查找,因此只能顺序查找,查找的时间复杂度为O(n)

其次是插入,链表的插入操作时间复杂度是O(1),因此总的操作时间复杂度为O(n)

 

知识点:链表

以下结构类型可用来构造链表的是()选项有struct aa{ int a;int * b;};struct bb{ int a;bb * b;};struct cc{int *a; cc b;}; struct dd{int *a; aa b; } 所以选struct bb{ int a;bb * b;}; 解释:想构造链表需要有一个指向此结构体的指针,因此选B

 

知识点:链表

以下关于链表和数组说法正确的是()

数组从栈中分配空间,链表从堆中分配空间

数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)

数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n)

解释:

数组静态分配内存,链表动态分配内存;
数组在内存中连续,链表不连续;
数组元素在栈区,链表元素在堆区;
数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

 

知识点:链表
(***)将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为()?
O(M × N × lgN) 解释:

1. 在每一个链表中取出第一个值,然后把它们放在一个大小为N的数组里,然后把这个数组当成heap建成小(大)根堆。此步骤的时间复杂度为O(N)

2. 取出堆中的最小值(也是数组的第一个值), 然后把该最小值所处的链表的下一个值放在数组的第一个位置。如果链表中有一个已经为空(元素已经都被取出),则改变heap的大小。此步骤的时间复杂度为O(lg N).

3. 不断的重复步骤二,直到所有的链表都为空。

建堆只建一次,复杂度为O(N);调整堆MN-1次,复杂度为(MN-1)*O(lg N)。所以为O(MN*lg N)


知识点:链表
以下数据结构说法,错误的是___?
选项是

红黑树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)
B+树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)
Hash表插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(n)
排序链表插入操作的平均时间复杂度为O(n),最坏时间复杂度为O(n)

选 Hash表插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(n) 解释:

各种数据结构的search、insert和delete操作在平均情况下的时间复杂度比较

数据结构

search

insert

delete

数组

O(n) ,有序数组折半查找是O(lgn)

O(n)

O(n)

双向链表

O(n)

O(1)

O(1)

排序二叉树

O(lgn)

O(lgn)

O(lgn)

哈希表(n与槽数m成正比)

O(1)

O(1)

O(1)


知识点:链表
(好题!)在非空双向循环链表中q所指向的结点前插入一个由p所指的链结点的过程依次为:

1

2

3

rlink(p)←q;

llink(p)←llink(q);

llink(q)←p;

4      (?)

填rlink(llink(p)) <- p

解释:

双链表的插入两种方法:

一、首先处理新插入节点p的后继、前驱,然后再处理后继的前驱、新节点的前驱的后继

                  p->next = q;  //p的后继

                  p->pre = q->pre;//p的前驱

                  q->pre = p; //(q)的前驱

                  p->pre->next = p;///新节点的前驱( p->pre)的后继

二、前两步都一样:第三步处理新结点前驱的后继,再后继的前驱

                  p->next = q;  //p的后继

                  p->pre = q->pre;//p的前驱

                  q->pre->next = p;  //这一步要在前面,

                  q->pre = p;

 

知识点:链表

下列叙述中,有关线性链表叙述正确的是()

线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的


知识点:静态链表
需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 。
选项有单链表 静态链表 线性链表 顺序存储结构
选静态链表
解释:静态链表:定义一个较大的结构数组作为备用结点空间(即存储池)。
当申请结点时,每个结点应含有两个域:data域和cur域。
data域用来存放结点的数据信息,需注意的是,此时的cur域不再是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值