牛客网 选择题 链表 --- 手记1

1、线性表中每一个元素都有一个前驱和一个后继。 错误:第一个元素没有前驱,最后一个元素没有后驱。
2、一个长度为100的循环链表,指针A和指针B都指向了链表中的同一个节点,A以步长为1向前移动,B以步长为3向前移动,一共需要同时移动多少步A和B才能再次指向同一个节点____。 50
解析:
(1)因为有100个节点,可以先假设先都在节点1,B经过33步刚刚到达节点100,而A在34,第34步B到达节点3,A在35,所以接下来是3+3n=35+n,所以n=16,所以总共=34+16=50。
(2)请问想着每走一步两人差距2,总长100,所以是50,这样也可以么?
3、一个非空广义表的表尾() 只能是子表
解析:(1)《数据结构》对广义表的表头和表尾是这样定义的:
如果广义表LS=(a1,a2…an)非空,则 a1是LS的表头,其余元素组成的表(a2,a3,…an)是称为LS的表尾。
根据定义,非空广义表的 表头是一个元素,它 可以是原子也可以是一个子表, 而表尾则必定是子表。例如:LS=(a,b),表头为a,表尾是(b)而不是b.另外:LS=(a)的表头为a,表尾为空表().
(2)非空广义表,除表头外,其余元素构成的表称为表尾,所以非空广义表尾一定是个表
4、下面有关循环单向链表,说法正确的有? ac
a 查找一个节点或者访问特定编号的节点则需要O(n)的时间
b 每个节点有两个连接:一个指向前一个节点,而另一个指向后一个节点
c 首节点和末节点被连接在一起
d 判断链表结束的条件是pTail == NULL
解析:
b 单向链表,仅有一个链接,指向下一个节点 。
d 因为是循环链表,判断的链表结束的条件应该是 pTail != head。
循环链表 始终都是头节点指向尾节点。
5、循环链表不是线性表,这样的说法正确吗? 不正确
链表都是线性数据结构,图与树是非线性数据结构。
6、带头结点head的单向循环链表L为空的判断条件是() head->next==head
7、带头结点的单链表为空的判定条件是_() head—>next = = NULL
解析:
不论是带头结点的链表还是不带头结点的链表,头指针head都指向链表中的第一个结点。如果该链表有头结点,则头指针head指向头结点,如果没有头结点,则头指针head指向链表的第一个节点。
1 带头结点的单链表中头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储信息。头指针head始终不等于NULL,head->next等于NULL的时候链表为空。
2 不带头结点的单链表中的头指针head直接指向开始结点,当head等于NULL的时候链表为空。头结点的存在,使得空链表与非空链表的处理变得一直,也方便了对链表的开始结点插入或删除操作。
8、将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为()? O(N * M * logN)
解析:

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

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

  3. 不断的重复步骤二,直到所有的链表都为空。
    建堆只建一次,复杂度为O(N);调整堆MN-1次,复杂度为(MN-1)O(lg N)。所以为O(MNlg N)

9、关于数据结构的以下说法,错误的是 c
a 红黑树插入操作的平均时间复杂度为0(log n),最坏时间复杂度为0(log n)
b B+树插入操作的平均时间复杂度为0(log n),最坏时间复杂度为0(log n)
c Hash插入操作的平均时间复杂度为0(log n),最坏时间复杂度为0(n)
d 排序链表插入操作的平均时间复杂度为0(n),最坏时间复杂度为0(n)

10、用常规的非递归方法遍历一个平衡二叉树,所需的时间复杂度和空间复杂度是?() O(n),O(n)
时间复杂度:分支的数量*每个分支的元素=节点数n
空间复杂度:看栈需要的空间
11、下列叙述中正确的是( ) a
a 算法的时间复杂度与运行算法时特定的输入有关
b 算法的时间复杂度与算法程序编制者的水平有关
12、

从第8个那就没看错题,看论文相关的东西
https://www.nowcoder.com/test/question/done?tid=19980079&qid=91#summary

猜你喜欢

转载自blog.csdn.net/csdnlijingran/article/details/84025998