1.将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(logN)。
F
解析:
二分查找的平均复杂度是O(logN)没有错,一看到这个就跳坑了。然后知道陷阱来了!按顺序存放在单项链表中。二分查找是不可以用链表存储的:
这是由链表的特性决定的。链表是很典型的顺序存取结构,数据在链表中的位置只能通过从头到尾的顺序检索得到,即使是有序的,要操作其中的某个数据也必须从头开始。
这和数组有本质的不同。数组中的元素是通过下标来确定的,只要你知道了下标,就可以直接存储整个元素,比如a[5],是直接的。链表没有这个,所以,折半查找只能在数组上进行。
- 在单链表中,要访问某个结点,只要知道该结点的指针即可。因此,单链表是一种随机存取结构。
F
解析:
线性表分(顺序存储和链式存储)
顺序存储即数组,我们使用数组的时候申请的是连续的内存空间可以直接读取的,a[24],a[25]
链式存储即链表,链表中单个节点的内存地址不是连续的,而是散列在计算机中,通过next指针访问下一个节点,所以所必须遍历链表才能读取数据!
总结:
顺序表:顺序存储,随机读取
链式:随机存储,顺序读取(必须遍历)
- 取线性表的第i个元素的时间同i的大小有关。
F
解析:
线性表分顺序表和链表
顺序表最主要的特点是随机访问,即通过首地址和元素序号可以在O(1)的时间内找到指定的元素
线性表因为是按序号直接取值,所以没有关系,但如果是链式存储结构就有关系
4.在具有头结点的链式存储结构中,头指针指向链表中的第一个元素结点。F
解析:
头指针 指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)。
有时在单链表的第一个结点之前附设一个结点,称之为头结点 。 头结点的数据域可以不存储任何信息,也可以存储如线性表长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。单链表的头指针指向头结点。若线性表为空,则头结点的指针域为“空”。
有头结点的链表结构中,头指针指向链表的头结点,因为单链表不具有回溯性,即通过指针指向的节点不能找到该节点的前一个节点,只能找到后面的节点。
目的是便于链表的操作;比如删除第一个数据节点时,让头结点的指针域指向第二个数据节点即可。如果头指针指向的是第一个数据节点,那么通过此指针不能找到前一个节点,也就不能实现删除。
5.在一个设有头指针和尾指针的单链表中,执行删除该单链表中最后一个元素的操作与链表的长度无关F
解析:
必须要遍历到倒数第二个元素把它设为尾部(链表不是双向链表)
6.在用数组表示的循环队列中,front值一定小于等于rear值。F
解析:
rear在对max取余之后会从零开始,但这时front并不是零。所以会出现front>rear,( >,=,<三种情况都有可能出现)
(可以这样理解:因为是循环的,所以可能rear由大变小,画个图就知道了。)
7.若采用“队首指针和队尾指针的值相等”作为环形队列为空的标志,则在设置一个空队时只需将队首指针和队尾指针赋同一个值,不管什么值都可以。T
解析:
判断队满的方式一:牺牲一个存储的单元来区分空队、满队
约定:当队头指针在队尾指针的下一个位置时,队满
队空:q.frontq.rear
队满:(q.rear+1)%MAXSIZEq.front
队列中的元素个数:(q.rear-q.front+MAXSIZE)%MAXSIZE
答案:T
解析:注意题目中的字眼:“任一指定序号”“最后”,说明已经确定了位置,此时根据时间复杂度,顺序线性表的查找为 O(1) ,因为实在最后进行插入和删除的,所以不涉及元素的移动,(如果插入和删除的位置不在最后,则删除过后删除位置之后的元素要全部往前移,插入时要先将插入位置之后的元素全部往后移来腾出空间插入,所以这是插入和删除操作的时间复杂度就为 O(n) )。 如果时线性链表,则每次取相应的元素时都要进行遍历,此时的时间复杂度为 O(n) 。插入和删除如果指明位置时时间复杂度为 O(1) ,如果没有指明位置则仍需要先遍历找到位置再操作,此时的时间复杂度为 O(n) 。
时间复杂度:O(2^N)
只有删除最后一个元素不需要移动,O(1)
答案:F
解析单链表也称线性链表,对链表的结点进行访问无论是否具体指出访问哪个元素,都要从头遍历链表,所以访问操作的时间复杂度为 O(n) 。增加结点即插入结点,如果指明插入到某个位置则时间复杂度为 O(1) ,如果没有指明插入位置,如 按大小插入,则先要遍历一遍来确定插入的位置然后再插入,此时的时间复杂度为 O(n) 。
循环队列指的是用数组表示的队列,利用求余数运算使得头尾相接。循环队列本身是一种顺序存储结构,而循环链表是一种链式存储结构。
1-17
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。(F)
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(N)和O(1)
没有这种说法
链表没有循环队列的说法
35以前都是线性部分
1-35 若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点(F)
没有这种说法
没有这种说法
度为二的树就是二叉树。(F)
度为2只是度最大为2
1-56
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。(F)
1-53
存在一棵总共有2019个结点的二叉树,其中有16个结点只有一个孩(T)
Prime先有顶点添边
Kruscal 先有边添顶点
线性表、堆栈、队列的主要区别是什么?
(2分)
A.
线性表用指针,堆栈和队列用数组
B.
堆栈和队列都是插入、删除受到约束的线性表
C.
线性表和队列都可以用循环链表实现,但堆栈不能
D.
堆栈和队列都不是线性结构,而线性表是
B
不带头节点的话,选A
先进先出
n = n0 + n1 + n2 + n3 + n4
m = n-1
m = n1 + 2n2 + 3n3 + 4n4
n0 = n2 + 2n3 + 3*n4 + 1
选c