链表学习(6)

来源:互联网 发布:数据库中什么是视图 编辑:程序博客网 时间:2024/06/18 12:16

1.设顺序表的长度为n。下列最坏情况下比较次数小于n的是(A)

A 寻找最大项  B 堆排序C 快速排序    D 顺序查找法

分析:在顺序表中查找最大项,最坏情况比较次数为 n-1 ;顺序查找法最坏情况下比较次数为 n 。快速排序在最坏情况下需要进行 n(n-1)/2 、堆排序需要 nlog2n ,这两种方法无法确定比较次数是否小于 n 。故本题答案为 A 项。

 

2.栈和链表是两种不同的数据结构


3.用邻接表表示图进行深度优先遍历时,通常采用栈来实现算法。

 

4.将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(MN*lg N)

 

分析二:1)、两两合并链表。合并链表复杂度 * 一次合并次数 * 所有合并次数。两两合并的复杂度会指数递增,合并数会指数递减。一共应该是log(N)次。前面的合并复杂度较高。所以一般不采用该方法来合并链表。

2)、利用堆来合并,( O(N) + O(log N * N )) * M。先利用最链表第一个数,N个数建立堆,复杂度 O (N),重构堆,并排序,复杂度 O(logN * N )每个链表M个数,上述两步重复M次。结果为 M * (O(N) +O(logN * N))= O (M * N * logN)。

 

5.元素在集合中有序,指的是元素插入过程中记录了元素的插入顺序。

 

6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用(D)最节省时间。

A 单链表                 B 单循环链表C带尾指针的单循环链表    D带头结点的双循环链表

分析:首先总在末位操作。所以使用循环链表。又因为要执行删除操作。若使用单循环链表,例如对....->X->Y>Z->...,Y删除后无法一步访问X。若双循环链表,可向回访问。所以选D。


7.线性表的顺序存储结构是一种随机存取结构,线性结构的链式存储是一种顺序存储的存储结构。

 

8.邻接表是图的一种顺序存储结构。

 

9.对顺序表而言,删除第一个元素就需要后续元素都向前移动一个位置。每删除一次都需要移动大量元素,因此不宜采用。

 

10.在有n个叶子节点的哈夫曼树中,总结点数是:2n-1;

带头结点的双循环链表L为空表的条件是:L->next=L;

 

11.双向链表插入、删除点击打开链接

双向链表的插入顺序:先搞定插入节点的前驱和后继,再搞定后节点的前驱,最后搞定前节点的后继。

 

12.静态链表中指针表示的是:数组下标

分析:静态链表:数组的每一个下标都对应一个data和一个cur。数据域data用来存放数据元素,;而游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。

 

13. 在栈中,栈底指针保持不变,有元素入栈,栈顶指名增加,有元素出栈,栈顶指针减少。

循环队列中,队头指针和队尾指针的动态变化决定队列的长度。在循环链表中,前一个结点指向后一个结点,而最后一个结点指向头结点,只有头结点是固定的。线性链表中,由于前一个结点包含下一个结点的指针,尾结点指针为空,要插入或删除元素,只需要改变相应位置的结点指针即可,头指针和尾指针无法决定链表长度

 

14.某带链的队列初始化状态为front=rear=NULL,经过一系列正常的入队与退队操作后,front=rear=10.该队列中元素个数:1。

 

分析:往队列的队尾插入一个元素为入队,从队列的排头删除一个元素称为退队。初始时 front=rear=0 , front 总是指向队头元素的前一位置,入队一次 rear+1 ,退队一次 front+1 。队列队头队尾指针相同时队列为空。而带链的队列,由于每个元素都包含一个指针域指向下一个元素,当带链队列为空时 front=rear=Null ,插入第 1 个元素时, rear+1 指向该元素, front+1 也指向该元素,插入第 2 个元素时 rear+1 , front 不变,删除 1 个元素时 front+1 即front=rear不为空时带链的队列中只有一个元素

 

15. 广义表:是线性表的扩展,具体定义为n(n>=0)个元素的有限集合。其中元素有以下两种类型:

1)一个原子元素(指不可再分的元素)

2)一个可以再分的元素(或称为一个子表)

如果所有元素都是原子元素,则称为线性表,如果含有子表,则是广义表。n的值是广义表的长度,如果n=0,称广义表为空表。

 

常见的广义表为:

A=(); B=(()); C=(alb); D=(A,B,C); E=(a,E)

广义表中含有元素的个数称为广义表的长度,广义表中含有的括号对数称为广义表的深度

 

从上述定义和例子可推出列表的3个重要结论:

1)列表的元素可以是子表,而子表的元素还可以是子子表…由此,列表是一个多层次的结构

2)列表可为其他列表所共享。如列表D可以直接引用其他列表。3)列表可以是一个递归的表,即列表也可以是其本身的一个子表。

 

广义表可看成是一种特殊的线性表,表中的数据元素本身也是一种线性表。

 

16.在一个带头结点的单链表HL中,若要在第一个元素之前插入一个由指针p指向的结点,则执行?

C p->next=HL->next;HL->next=p;

注意:头指针不是第一个元素,仅仅是一个标识,并不指向第一个元素。

 

17. (1)由题设条件可知,硬盘大小为540MB且磁盘物理块大小为1KB时,该硬盘共有盘块540MB/1KB = 540K个。

又因为219<540K<220,所以540K个盘块号需要用20位二进制数表示,也即文件分配表FAT的每个表项为20/8=2.5B。所以,540MB磁盘的FAT需占用存储空间容量为:

2.5B×540K=1350KB

(2)当硬盘容量大小为1.2GB时,硬盘共有盘块1.2M个。

又因为220<1.2M <221,所以1.2M个盘块号需要用21位二进制数表示,为了方便FAT的存取,则每个表项用24位(3B)二进制数表示。所以,1.2GB磁盘的FAT需占用存储空间容量为:

3B×1.2M=3.6MB

 

分析二:1B=8bit,序号只能是4的倍数。
物理块大小1KB,540MB,即540K个分区,计算2^19<540K<2^20,所以序号是20个bit,且20是4的倍数。每个序号需要20/8=2.5B的空间存储。
540MB需要540K*2.5B=1350KB即1.35M。

1.2GB,即1200K个分区,2^20<1200K<2^21,也就是需要21个bit才能存储,但是序号只能是4个倍数,所以需要24个bit,也就是3B的空间。1.2GB需要1200K*3B=3600KB即3.6M

 

18. A.单链表的每个节点都具有唯一的前驱节点和唯一的后继节点,所以当两个单链表存在相交的节点时,这两个链表则同时拥有这个节点,以及这个节点的所有后继节点,当这个公共节点是尾节点时,他们则只含有公共一个节点-------尾节点。

 

B.快慢指针是判断单链表是否有环的一种方法:两个指针,每次移动的步长为2叫做快指针,每次移动步长为1的指针叫做慢指针。快慢指针同时从头结点出发,当快指针率先到达NULL的时候,则说明此单链表中不存在环,当快指针追上慢指针的时候,说明此单链表中存在环

 

C.有环的单向链表和无环的单向链表不能相交,因为当相交的时候,无环的单向链表也会被迫存在一个环,只不过这个环的”起点“可能不是原来单向链表的头结点。

D. 两个单向链表之间相交可以存在环。

 

19.循环单链表的最大优点是:从表中任一结点出发均可找到表中其它结点。

 

20.

数据结构   search              insert    delete

数组       O(N),有序数组       O(N)      O(N)

折半查找就是O(logN)

双向链表   O(N)                O(1)      O(1)

排序二叉树 O(logN)                 O(logN)   O(logN)

哈希表     O(1)                O(1)     O(1)


哈希表插入的时间复杂度与冲突次数有关,O(冲突次数/n),最好的情况冲突次数为0,直接插入,时间复杂度为O(1)。最坏情况是所有值对应同一个键值,这是冲突次数最多,为0+1+2+3+4+…+(n-1)=n*(n-1)/2,平均比较次数为(n-1)/2,时间复杂度为O(n) 。

 

红黑数 
一、红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
性质1.节点是红色或黑色。
性质2.根节点是黑色。
性质3每个叶节点(NIL节点,空节点)是黑色的。
性质4每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

二、 红黑树是二叉搜索树的一种。它与普通二叉搜索树不同的是,红黑树的每个节点都附加了另一个属性――颜色,可以是红色,也可以是黑色。通过对于每条路径上节点颜色的规则进行限定,红黑树可以保证任何两条从根部到树叶的路径节点个数相差不超过2倍。所以,红黑树是一种近似平衡的二叉搜索树。 

三、红黑树的查找、最大值、最小值、前趋、后继等操作,与普通的二叉搜索树没有什么区别。插入和删除操作需要重新实现。仅仅用普通的二叉搜索树的插入和删除动作,可能会破坏红黑树本身的一些性质,因此,需要进行额外的处理。这些额外的处理主要是改变树节点的颜色,或是改变树的结构。

 

小结

       B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;

       B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;

       B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

       B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;

 

 

原创粉丝点击