铃木

导航

数据结构笔记汇总

1.   逻辑结构:线性和非线性

线性:  线性(1:1、栈、队、数组

非线性:树形(1:多)图形(多:多)

存储结构:顺序(数组)、链式(指针)

2.   逻辑结构与元素相对位置无关

链式存储物理地址和逻辑地址不一定相同连续,所以它内存中可存储单元的地址/数据结点地址:连续与否都可以

3.   (解释)不生成可执行文件

4.   读取元素花费时间最少顺序表

5.   在具有 n 个结点的单链表上查找值为 x 的元素时,其时间复杂度为On

6.   设指针 q 指向单链表中结点 A,指针 p 指向单链表中结点 A 的后继结点 B,指针 s 指向被插的结点 X,则在结点 A 和结点 B 结点 X 的操作序列为:q->next=s;s->next=p;

7.   访问第 i 个元素的前驱(1<i<=n)的时间复杂度为O1

8.   添加/删除操作

单链表

      

带头结点的单链表

带头结点的双循环单链表

单链表的头插法建立链表

单链表的头插法建链表所得到的数据的顺序与输的时候的顺序相反

单链表的头插法建链表算法不简单,要引⼊⼤量的指针辅助运算。(F

单链表的尾插发建立链表

单链表的尾插法建链表所得到的数据的顺序与输的时候的顺序相同

双链表

带头结点的双循环链表

链式存储的后插法

带头结点的双循环链表的空表

 

9.   3n+nlog2n+n2+8的数量级:n2

10.  算法的评价不包括并行性

11.  集合中任何两个结点之间都有逻辑关系但组织形式松散(F

12.  数据元素具有相同的特性=数据项个数相同,类型一致

13.  数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为顺序存储结构

14.  算法

定义:有限序列

目的:分析效率求改进

15.  高效性:指算法的执行效率高(T

指算法需要的时间性能(F

16.  链表

Malloc()申请

Free()释放

个带头结点的双向循环链表中,若要在 p 所指向的结点之前插⼊⼀个新结点,则需要相继修改(4)个指针域的值

1、该新结点前驱指针指向p的前驱

2p的前驱指针指向该新结点

3、该新结点的后继域指向p结点

4、前驱的后继域指向该新结点

17.  线性表

在进添加/删除元素时,应该在删除元素前判空

                          在添加元素前判空(F

可以在任何位置插入删除

除第个和最后个元素外,其余每个元素都由个且仅有个直接前驱和直接后继

元素之间的逻辑关系是通过(物理位置)决定的.

有限序列,可以为空

串是种特殊的线性表

两种存储结构:线性和链式

线性表链式

线性表链式:插入删除方便只需要向前或向后移动元素即可(F

线性表链接存储

    链表是种动态存储结构,链表的结点可调申请 malloc() free()释放

                                          链表的结点可free()申请和malloc()释放F

链表是随机存取存储结构,对链表的存取必须从头指针开始

                         对链表的存取可以从任何结点开始F

删除运算便;只需修改相应指针值

                    只需要向前或向后移动元素即可F

逻辑上相邻的元素,其物理位置定相邻,元素之间的邻接关系由指针域指示

不需要预先分配存储空间,适用于数据量变化较大的情况

    表的长度:数据结点的个数

    适用于经常进行插入和删除的操作

链接存储的存储结构所占存储空间分两部分,部分存放结点值,另部分存放表示结点间关系的指针

线性表顺序存储

不便于插入和删除的实现,而链式存储便于

适用于变化量小的情况

必须按最可能度预分存储空间,存储空间利率低,表的容量难以扩充,静态存储结构

是一种随机存取结构

适用于经常进行存取的操作

删除时的最坏情况:要删除的元素是顺序表的第一个元素

删除时的最好情况:要删除的元素是顺序表的最后一个元素

要求能够较快的插和删除,要求储存结构能够反映数据元素之间的逻辑关系则应该以顺序储存式储存

度为 n 的顺序存储的线性表中,向第 i 个元素(1<=i<=n+1)位置插⼊⼀个新元素时,需要从后向前依次后移(n-i+1)个元素

线性表一旦建立,就不能添加元素(F

最后一个元素之后插入一个元素和删除最后一个元素,采用容量足够大的顺序表

长度为n,删除第i个元素,要向前移动n-1个元素

长度为n,第i个位置插入一个新元素,时间复杂度为On

线性表是n数据元素的有限序列(所以学院组织结构表就不是线性表)

顺序线性表中有 n 个数据元素,则删除表中第 i 个元素需要移动(n-1)个元素

18.  顺序表

删除操作时,应该将表的长度-1

⼊⼀个元素所需移动的元素平均数是n+1/2

顺序表的度是指:表中数据元素的个数

个有 127 个元素的顺序表中插⼊⼀个新元素并保持原来顺序不变,平均要移动(63.5)个元素

度为 n 的顺序表中,删除值为 x 的元素时需要较元素和移动元素的总次数为n

表尾插⼊⼀个元素的时间复杂性的量级为O(1)

19.  数组

逻辑结构à线性结构

存储结构à顺序结构

维数组中有 n 个数组元素,则读取值为 x 的数据元素的平均时间复杂度为O(n)

维数组中有 n 个数组元素,则读取第 i 个数组元素的平均时间复杂度为0(1)

假定利数组 a[N]顺序存储个栈, top 表示栈顶指针,top==-1 表示栈空,并已知栈未满,当元素 x进栈时所执的操作为a[++top]= x

个具有 n 个单元的顺序栈中,假定以地址低端(即 0 单元)作为栈底,以 top 作为栈顶指针,则当做出栈处理时,top 变化为top—

20.  队列

先进先出

只能在队尾添加/插入新元素

只能在队首删除元素

论是顺序存储还是链接存储的栈和队列,进或删除运算的时间复杂性均为O(1)

顺序队进元素队时最的问题是会出现假溢出现象

队列是被限定为只能在表的端进运算,在表的另端进删除运算的线性表

当利⽤⼤⼩ N 的数组存储循环队列时,该队列的最⼤⻓度是n

个顺序循环队列中删除元素时,先需要后移队首指针

判定个队列 QU(最多元素为 m0)为满队列的条件是QU->rear QU->front = = m0

个链队列中,front rear 分别为头指针和尾指针,则插⼊⼀个结点 s 的操作为rear->next=s;rear=s;

n 个结点的双向链表中指针 p 所指向的结点之前插⼊⼀个新结点时,其时间复杂性的量级为O(1)

21. 

先进后出,后进先出

只能在栈顶插入/删除操作

向顺序栈中插新的元素分三步,分别是:断溢出或栈满栈顶指针新元给栈顶单元

从顺序栈中删除元素分三步,分别是:判断栈空 栈顶指针的值返回 修改栈顶指针

向栈中压元素的操作是:先移动栈顶指针,然后存元素

链表作为栈的存储结构则退栈操作:必须判别栈是否为空

链表作为栈的存储结构则进栈操作:对栈不作任何判别

顺序栈中在做出栈运算时,应先判别栈是否为空

顺序栈中在做进栈运算时,应先判别栈是否为满

Pushpop

设栈 S 和队列 Q 的初始状态为空,元素 e1,e2,e3,e4,e5,e6依次通过栈 S个元素出栈后即进队列 Q,若 6 个元素出队的序列是 e2,e4,e3,e6,e5,e1,则栈的容量少应该是3

个栈的输序列为:1,2,3,4,则栈的不可能输出的序列是4321

打印机à队列

判定个顺序栈 ST(最多元素为 m0)为空的条件是ST->top==0

假定个链式栈的栈顶指针 top 表示,每个结点的结构具有两个域 data next,出栈时进的指针操作top=top->next

删除空的顺序存储结构的堆栈的栈顶元素,栈顶指针 top 的变化是top=top-1

个栈顶指针为 hs 的链栈中插⼊⼀*s 结点时,应执s->next=hshs=s

顺序栈中当栈中元素为 m 时,做进栈运算时发上溢,则说明栈的可容量为m

判定个顺序栈的 S(最多元素时 m0)为满的条件是S->top==m0-1

为了增加内存空间的利率和减少发上溢的可能性,由两个栈共享⼀⽚连续的内存空间时,应将两个

栈的(栈底)分别设在这内存空间的两端,这样只有当两个栈的栈顶在栈空间的某位置相遇时才产上溢

设输序列 123n 经过栈作后,输出序列中的第个元素是 n,则输出序列中的第 i 个输出元素是n+1-i

判定个顺序栈 S(栈空间⼤⼩ n)为空的条件是S->top==0

设输序列为 123456,则通过栈的作后可以得到的输出序列为:325641

设指针变量 front 表示链式队列的队头指针,指针变量 rear 表示链式队列的队尾指针,指针变量 s 指向将要队列的结点 X,则队列的操作序列为rear->next=srear=s

解决顺序队上溢的

1、每当删除个队头元素时,则依次移动队中的元素,始终使 front 指针指向队列中的第个位置

2、采平移元素的:每当队列中加⼊⼀个元素时,队列中已有的元素向队头移动个位置

3、建⽴⼀的存储空间,但这样做会造成空间的使效率降低

4、发上溢时,动丢失多余元素(F)

22.  单链表

已知单链表尾指针,时间复杂度为O(1)

单链表中设置头结点:空表和非空表统一,算法处理一致

空的循环单链表 head 的尾结点(由 p 所指向),满条件:p->next==head

度为 n 的单链表链接在度为 m 的单链表之后的算法的时间复杂度为O(m)

个单链表中,若删除 p 所指向结点的后续结点(=单链表中指针 p 指向结点 m,若要删除 m 之后的结点(若存在),则需要修改指针的操作为),则执p->next=p->next->next;

单链表中 n 个数据结点,则读第 i 个数据结点的平均时间复杂度为On

对于个具有 n 个结点的单链表,在已知的结点*p 后插⼊⼀个新结点的时间复杂性为O(1)

单链表的判空条件

不带头结点的单链表head为空:head=null

条单链表的头指针变量为 head 且该链表没有头结点,判空:head=0

23. 

à层次

二叉树不是特殊的树,使用不是树转化过来的特殊情形

叉树与树具有相同的树形结构(F

二叉树是非线性数据结构,顺序存储结构和链式存储结构都能存储,但,不是所有的叉树树形结构都适顺序存储结构

若初始森林中共有 n 叉树,进 2n-1 次合并后才能剩下棵最终的哈夫曼树(F

标串的度为 n,模式串的度为[n/3],则执模式匹配算法时,在最坏情况下的时间复杂度是O(n2)

分支

叉树上叶节点数为 n0,双分数为,单分数为 n1,则n0=n2+1

深度

深度为 k 的完全叉树中最少有(2k-1)个结点

棵完全叉树中有 65个结点,则该完全叉树的深度为7,因为2n-1

叉树有 n 个结点,则其深度无法确定

    结点数

叉树的第 k 层的结点数最多为2k-1

叉树上第 5 层的结点数最多为16个,因为2k-1

深度为 5 叉树最少有(5)个结点

如果 T2是由有序树 T 转化来的叉树,T后序结点=T2中序结点,T前序结点=T2前序结点

设某棵叉树中有 2000 个结点,则该叉树的最⼩⾼度为11,因为210=1024<2000211=2048>2000

棵树中,每个结点最多有(1)个前驱结点

叉树中第 i(i≥1)层上的结点数最多有(2i+1)个

n 个值成的哈夫曼树中共有(2n-1)个结点.

叉树根结点的层次为 0度为 h 的满叉树中的结点个数是2n+1-1

F 是由 T1T2 T3三棵树组成的森林,与 F 对应的叉树为 BT1T2 T3 的结点数分别为 N1 N3,则叉树 B 的根结点的左树的结点数为N1-1

对含有(1)个结点的叉树,采任何种遍历式,其结点访问序列均相同

棵深度为 h 的满 k 叉树有如下性质: 第 h 层上的结点都是叶结点,其余各层上的结点都有 k .如果按层次顺序从 1 开始对全部结点编号,则各层上的结点数ki-1

实现任意叉树,m 个树叶, n 个结点,度为 1 的结点 t 个,度为 2 的结点有 p 个,则m=p+1

对于棵具有 n 个结点叉树,当进链接存储时,其叉链表中的指针域的总数为 2n,其中(n-1)个链接孩结点,(n+1)个空闲着

设深度为 k 叉树上只有度为 0和度为 2的节点,则这类叉树上所含结点总数最少2k-1

二叉树共有5种不同的形态

具有 3 个结点的叉树共有(5)种状态.

设某棵叉树中只有度数为 0 和度数为 2的结点且度数为 0 的结点数为 n,则这棵叉中共有(2n-1)个结点

叉树中,度为 0 的结点个数为 n0,度为 2 的结点个数为,则 n=n2+1

    叶子结点

设某棵完全叉树中有 100 个结点,则该叉树中有(50)个叶结点

设某棵叉树的度为 10,则该叉树上叶结点最多有512

某哈夫曼树中有 199 个结点,则该哈夫曼树中有(100)个叶结点//n+1/2

指针域

m 叉树的结点数为 n多重链表表示其存储结构,则该树中有n(m-1)+1)个空指针域

设哈夫曼树中的结点总数为m,若叉链表作为存储结构,则该哈夫曼树中总共有2m)个空指针

.

N 个结点链接存储,指针域总数 2n,链接孩结点 2n,空闲的有 n+1

    高度

对于个具有 n 个结点的叉树,当它为(完全二叉树)具有⼩⾼

具有 n(n>0)个结点的完全叉树的度为[log 2 (n+1)][log 2 n]+1

对于个具有 n 个结点的叉树,当它为棵(单分支叉树时具有最⼤⾼.

对于个具有 n 个结点的叉树,当它为单分⽀⼆叉树时具有最⼤⾼度,其度为n

    带权路径长度

    左孩子、右孩子、双亲结点

将含有 83 个结点的完全叉树从根结点开始编号,根为 1 号,后按从上到下、从左到右的顺序对结

点编号,那么编号为 41 的双亲结点编号为20

    三叉树

        在三叉链表上,叉树的求双亲运算很容易实现(F

        欲实现任意叉树的后序遍历的递归算法不必使栈结构,最佳案是叉树采(三叉链表)存储结构.

棵具有 k 层的满三叉树中,结点总数为(3k-1)/2

棵三叉树的结点数为 50,则它的最⼩⾼度为5

 

    哈夫曼树

于通信的电仅由 8个字组成,字在电中出现的频率分别为

 

根据这些频率作为权值构造哈夫曼树,则这棵哈夫曼树的度为7

先序、中序、后序遍历

前序:第个结点 A 是根结点,是后序的最后个结点

前序:树的第个结点为树根结点

中序:根据前序的根节点,判断是否有左右树。

中序:--> 根节点-->

后序:--> -->根节点

先序: 根节点-->-->

 

 

    叉树的先序遍历序列和后序遍历序列正好相反,则该叉树满的条件是结点右孩

叉树的先序遍历序列和后序遍历序列正好相同,则该叉树满的条件是空或只有个结点

    叉树的先序遍历序列和中序遍历序列正好相同,则该叉树满的条件是结点左孩

       已知叉树的前序遍历和后序遍历序列并不能惟地确定这棵树,因为不知道树的根结点是哪个。(F

任何叉树的叶结点在其先根、中根、后跟遍历序列中的相对位置肯定不发生变化

任何叉树的叶结点在先序、中序和后序遍历序列中的相对次序不发生改变

叉树结点的先根序列、中根序列和后根序列中,所有叶结点的先后顺序完全相同

叉树中,具有两个⼦⼥结点,在中序遍历序列中,它的后继结点最多只能有⼦⼥结点

叉树的前序和后序遍历序列(不能)惟确定这棵叉树

ab 叉树上的两个结点,在中序遍历时,a b 前的条件是.a b

叉树满下列条件:对任意结点,若存在左、右树,则其值都它的上所有结点的值,于右上所有结点的值.现采中根)遍历式就可以得到这棵叉树所有结点的递增序列

叉树有 n 个结点,要按某顺序对该叉树中的结点编号,(号码为 1-n),编号须具有如下性质:

叉树中任结点 V,其编号等于其左树中结点的最编号加 1.其右树中结点的最编号等于 V 的编号加 1.试问应按(中序)遍历顺序编号

叉链表上,求双亲运算的时间性能很好(F

叉判定树应用在:描述分类过程和处理判定优化等⽅⾯

    后缀表达式

   

24. 

G1=(V1,E1) G2=(V2,E2)为两个图,如果 V1ÍV2,E1ÍE2 则称.G1 G2

有向图

某有向图中有 n 个顶点,则该有向图对应的邻接表中有(n)个表头结点

对于个有向图,若个顶点的度为 k1,出度为 k2,则对应逆邻接表中该顶点单链表中的边结点数为k1-k2

图的逆邻接表存储结构只适于(有向图)图

个具有 n 个顶点的有向图中,若所有顶点的出度数之和为 s,则所有顶点的度数之和2s

个具有 n 个顶点的有向图中,若所有顶点的出度数之和为 s,则所有顶点的度数之和s

个具有 n 个顶点的有向完全图中,所含的边数为n(n-1)

8 个结点的有向完全图最多有(56)条边,因为n(n-1)

无向图

向图 G 中有 n 个顶点 e 条边,则⽤⽤邻接表作为图的存储结构进深度优先或度优先遍历的时间复杂度为O(n+e)

向图 G 中有 n 个顶点 e 条边,则其对应的邻接表中的表头结点和表结点的个数分别为n2e

设某有向图的邻接表中有 n 个表头结点和 m 个表结点,则该图中有(m)条有向边

向图 G 中有 n 个顶点 e 条边,则邻接矩阵作为图的存储结构进⾏⼴度优先遍历时的时间复杂度为O(n2)

如果 n 个顶点的图是个环,则它有(n)成树

向图G中有n个顶点e条边,则邻接表作为图的存储结构进深度优先遍历时的时间复杂度为O(n2)

图中的条路径度为 k,该路径所含的顶点数为k+1

n 个顶点的向图 G 的顶点度数的最于或者等于(n)时,G 少有条回路

在含 n 个顶点和 e 条边的向图的邻接矩阵中,零元素的个数为n2-2e

对于个具有 n 个顶点和 e 条边的向图,若采邻接表表示,则表头数量为n

对于个具有 n 个顶点和 e 条边的向图,若采邻接表表示,则所有邻接表中的结点总数是2e

向图有 n 个顶点和 e 条边,则所有顶点的度的和为2e

一个无向图有 n 个顶点和e 条边,则该向图中所有顶点的度之和为2e

个具有 n 个顶点和 e 条边的向图的邻接矩阵中,表示边存在的元素(称为有效元素)的个数为2e

假设个有n个顶点和e条弧的有向图邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是O(n+e)

个具有 n 个顶点的向图中,要连通全部顶点少需要n-1条边.

向图 G 中有 n 个顶点,则该向图的最⼩⽣成树上有(n-1)条边

个具有 n 个顶点的有向图最多有(n(n-1))条边

个具有 n 个顶点的向完全图的边数为n(n-1)/2

设某向图中有 n 个顶点 e 条边,则建该图邻接表的时间复杂度为O(n+e)

向图 G(如下图所示),则其最⼩⽣成树上所有边的权值之和为8

向图中定义顶点 vi vj 之间的路径为从 vi vj 顶点序列

    路径长度

        Dijkstra 算法求某顶点到其余各顶点间的最短路径是按路径度(递增)的次序来得到最短路径的

        关键路径是事件结点络中的从源点到汇点的最路径

     

邻接表

    邻接表是图的种链式存储

    连通图

n 个顶点的连通图少(n-1)条边

具有 6 个顶点的向图少应有(5)条边才能确保是个连通图

个连通图中存在着(1)个连通分量

设某强连通图中有 n 个顶点,则该强连通图中少有(n)条边

具有 50 个顶点的向图少应有(49)条边才能确保是个连通图

对于个具有 n 个顶点的向连通图,它包含的连通分量的个数为1

如果从向图的任顶点出发进⾏⼀次深度优先搜索即可访问所有顶点,则该图定是连通图

任何向连通图的最⼩⽣成树有一棵或多棵

广度优先遍历和深度优先遍历

度优先遍历类似于叉树的层次遍历

个图的边集为{A,B,(A,C),(B,D),(C,F),(D,E),(D,F)},则从顶点 A 开始对该图进深度优先搜索,得到的顶点序列可能为A,C,F,D,E,B

已知图的邻接矩阵同下图所示,根据算法,则从顶点 0 出发,按度优先遍历的结点序列是0 1 2 3 4 6 5

已知图的邻接表如下所示,根据算法,则从顶点 0 出发按度优先遍历的结点序列是 0 3 2 1

已知图的邻接表如下所示,根据算法,则从顶点 0 出发按深度优先遍历的结点序列是 0 1 2 3

图的边集

个图的边集为{<0,1>3,<0,2>5,<0,3>5,<0,4>10,<1,2>4,<2,4>2,<3,4>6},则从顶点 v0到顶点 v4共有(4)条简单路径

个图的边集为{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},则从顶点 1开始对该图进⾏⼴度优先搜索,得到的顶点序列可能为1,2,4,5,3

    拓扑排序

拓扑排序:可以判断出个有向图中是否有环(回路)

个有向图的拓扑序列有一个或多个

稠密图、稀疏图(普里姆和克鲁斯卡尔)

        (Prim)算法求具有 n 个顶点 e 条边的图的最⼩⽣成树的时间复杂度为n2

若要求稠密图 G 的最⼩⽣成树,最好(普里姆) 算法来求解.

若要求稀疏图 G 的最⼩⽣成树,最好(克鲁斯卡尔) 算法来求解.

设有稠密图 G,则 G (矩阵)存储较省空间.

设有稀疏图 G,则 G (表)存储较省空间

领接矩阵

        向图的邻接矩阵是个对称矩阵

已知个图的邻接矩阵表示,计算 i 个结点的法是:求矩阵第 i 零元素之和

已知个图的邻接矩阵表示,删除所有从第 i 个结点出发的边法是:将矩阵第 i 全部置为 0

带权有向图 G 邻接矩阵 A 存储,则顶点 i 等于 A i ⾮⽆穷的元素个数之和

深度优先遍历类似于叉树的先序遍历

图的深度优先遍历序列不唯一

邻接表表示图进深度优先遍历时,通常是采()来实现算法的

邻接表表示图进⾏⼴度优先遍历时,通常是采(队列)来实现算法的.

对于具有 n 个顶点的图,若采邻接矩阵表示,则该矩阵的⼤⼩n2

有向图 G 邻接矩阵存储,其第 i 的所有元素之和等于顶点 i 出度

拓扑排序算法是通过重复选择具有(0)个前驱顶点的过程来完成的。//拓扑à没有前驱的

    图遍历

        连通图不能深度优先搜索法(F

    顶点与边

        个图中,所有顶点的度数之和=所有边数

        设某完全向图中有 n 个顶点,则该完全向图中有(nn-1)/2条边

25.  排序

大多数排序算法都有两个基本的操作:比较和移动

设需要对 10个不同的记录关键字进排序,则少需要较(9)次

排序的的是为了以后对已排序的数据元数进查找)操作

直接插排序和冒泡排序的时间复杂性为 O, 若初始数据有序(即正序),则时间复杂性为On

初始值

选择排序/简单选择排序/直接选择排序

在直接插和直接选择排序中,若初始数据基本反序,则选直接选择排序

在所有的排序法中,关键字的较次数与记录的初始排列关的是直接选择排序

个由 n 个整数组成的序列,借助排序过程找出其中的最值,希望较次数和移动次数最少,应选

直接选择排序)

关键字的较次数与记录的初始排列

在直接选择排序中,记录较次数为 O)数量级,记录的移动次数为O(n)数量级.

将上万个序并且互不相等的正整数序列,存放于顺序存储结构中,采选择排序法能够最快地找出其中最的正整数

前以较操作为基础的内部排序的时间复杂性 T(m)的范围是 Onlog2n)~ O),其较次数

与待排序记录的初始状态关的是(直接选择)排序

排序法中,从未排序序列中挑选元素,并将其依次放已排序序列(初始时为空)的端的法,称

选择排序

插入排序/直接插入排序

    n 个元素进直接插排序时间复杂性为n2

组初始记录关键字的度为 8,则最多经过(7)趟插排序可以得到有序序列.

在对 n 个元素进直接插排序的过程中,共需要进n-1)趟.

当初始序列已按健值有序时,直接插算法进排序,需要较的次数为n-1

直接插排序算法的平均时间复杂度为O(n²)

排序法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进⾏⽐较,将其放

已排序序列的正确位置上的法,称为插入排序

对于直接插排序、冒泡排序、简单选择排序、堆排序、快速排序,当件“局部有序”或度较

的情况下,最佳的内部排序法是直接插入排序

冒泡排序

   n 个元素的序列进冒泡排序,在降序的情况下较次数最多,其较次数为(n(n-1))/2

    n 个元素的序列进冒泡排序,最少的较次数是 n,此时元素的排列情况是已从排列

    n 个元素的序列进冒泡排序,最少的较次数是 n,此时元素的排列情况是升序

    n 个元素的序列进冒泡排序,其较次数为 nn-1/2时,其原始数据序列是(降序)情况

    对n个不同的排序码进升序冒泡法排列,排列好的较的次数最多

对n个不同的排序码进冒泡排序,在元素序的情况下较的次数为(n(n-1))/2

排序时扫描待排序记录序列,顺次较相邻的两个元素的⼤⼩,逆序时就交换位置,这是冒泡排序的

本思想

n 个元素的序列进冒泡排序,在(降序)的情况下较次数最多

n 个元素的序列进冒泡排序,最少的较次数是n-1

    在对组有 8 个记录的数据表进冒泡排序时,在整个排序过程中共需进(7)趟才可完成.

    件局部有序或度较的情况下,最佳的排序法是冒泡排序

快速排序

    快速排序是对序列中的元素通过适当的位置交换将有关元素次性地放置在其最终位置上

    最坏的情况下的时间复杂度是O(n²)

    在最坏情况下(如初始记录已有序),快速排序的空间复杂性为n

    在对 n 个元素进快速排序的过程中,最好情况下需要进log 2 n)趟

快速排序在(被排序的数据已基本有序)情况下最不利于发挥其.

在堆排序,快速排序和归并排序中,若从平均情况下排序最快,则应先选取(快速排序

    在堆排序中、快速排序和归并排序中,若从节省存储空间考虑,排在中间的是(快速排序

 

每次把待排序的元素划分为左、右两个区间,其中左区间中元素的关键字均于等于基准元素的关键字,右区间中元素的关键字均于等于基准元素的关键字,则此排序法叫作快速排序

快速排序算法的平均时间复杂度为O(nlog 2 n)

归并排序

    依次将每两个相邻的有序表合并成个有序表的排序法叫作归并排序

在归并排序过程中,需归并的趟数为log2n

   

    若对 n 个元素进归并排序,则进趟归并的时间复杂度为n

    路归并排序的时间复杂度为(nlog2n)

在归并排序中,归并趟数的数量级表示为Olog2n)

在内部排序中,要求附加的内存容量最的是归并排序

组初始记录关键字序列为(25501535808520403670),其中含有 5度为 2 的有序表,则归并排序的法对该记录关键字序列进⾏⼀趟归并后的结果为15253550204080853670

在归并排序中,若待排序记录的个数为 20,则共需要进 5趟归并,在第 3趟归并中,是把度为 4

有序表归并为度为4的有序表

希尔排序

组初始记录关键字序列为(9876543210),则以增量 d=5 趟希尔排序结束后前 5条记录关键字为43210

趟排序结束后不定能够选出个元素放在其最终位置上的是希尔排序

希尔排序的增量序列必须是递减

堆排序

在堆排序中、快速排序和归并排序中,若只从最坏的情况下排序最快并且要节省内存考虑,应选堆排序)

时间复杂度不受数据初始状态影响恒为 O(nlog2n)的是堆排序

在任何情况下,时间复杂度均为 O(nlog2n)的不稳定的排序法是堆排序

已知个链表中有 3000 个结点,每个结点存放个整数,(堆排序方法)于解决这 3000个整数的排序问题且不需要对算法作的变动

设有 1000 序的元素,希望最快的速度挑选出其中前 10 个最的元素,最好选)排序法

交换排序

        当两个元素较出现反序时(即逆序)就相互交换位置的排序法叫作交换排序

基数排序

   

        如果将所有中国按照⽣⽇来排序,则使基数排序)算法最快

比较排序的稳定和快慢

时间复杂度

       

       

关键字序列

26.  查找

    二分查找

   

1.   逻辑结构:线性和非线性

线性:  线性(1:1、栈、队、数组

非线性:树形(1:多)图形(多:多)

存储结构:顺序(数组)、链式(指针)

2.   逻辑结构与元素相对位置无关

链式存储物理地址和逻辑地址不一定相同连续,所以它内存中可存储单元的地址/数据结点地址:连续与否都可以

3.   (解释)不生成可执行文件

4.   读取元素花费时间最少顺序表

5.   在具有 n 个结点的单链表上查找值为 x 的元素时,其时间复杂度为On

6.   设指针 q 指向单链表中结点 A,指针 p 指向单链表中结点 A 的后继结点 B,指针 s 指向被插的结点 X,则在结点 A 和结点 B 结点 X 的操作序列为:q->next=s;s->next=p;

7.   访问第 i 个元素的前驱(1<i<=n)的时间复杂度为O1

8.   添加/删除操作

单链表

      

带头结点的单链表

带头结点的双循环单链表

单链表的头插法建立链表

单链表的头插法建链表所得到的数据的顺序与输的时候的顺序相反

单链表的头插法建链表算法不简单,要引⼊⼤量的指针辅助运算。(F

单链表的尾插发建立链表

单链表的尾插法建链表所得到的数据的顺序与输的时候的顺序相同

双链表

带头结点的双循环链表

链式存储的后插法

带头结点的双循环链表的空表

 

9.   3n+nlog2n+n2+8的数量级:n2

10.  算法的评价不包括并行性

11.  集合中任何两个结点之间都有逻辑关系但组织形式松散(F

12.  数据元素具有相同的特性=数据项个数相同,类型一致

13.  数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为顺序存储结构

14.  算法

定义:有限序列

目的:分析效率求改进

15.  高效性:指算法的执行效率高(T

指算法需要的时间性能(F

16.  链表

Malloc()申请

Free()释放

个带头结点的双向循环链表中,若要在 p 所指向的结点之前插⼊⼀个新结点,则需要相继修改(4)个指针域的值

1、该新结点前驱指针指向p的前驱

2p的前驱指针指向该新结点

3、该新结点的后继域指向p结点

4、前驱的后继域指向该新结点

17.  线性表

在进添加/删除元素时,应该在删除元素前判空

                          在添加元素前判空(F

可以在任何位置插入删除

除第个和最后个元素外,其余每个元素都由个且仅有个直接前驱和直接后继

元素之间的逻辑关系是通过(物理位置)决定的.

有限序列,可以为空

串是种特殊的线性表

两种存储结构:线性和链式

线性表链式

线性表链式:插入删除方便只需要向前或向后移动元素即可(F

线性表链接存储

    链表是种动态存储结构,链表的结点可调申请 malloc() free()释放

                                          链表的结点可free()申请和malloc()释放F

链表是随机存取存储结构,对链表的存取必须从头指针开始

                         对链表的存取可以从任何结点开始F

删除运算便;只需修改相应指针值

                    只需要向前或向后移动元素即可F

逻辑上相邻的元素,其物理位置定相邻,元素之间的邻接关系由指针域指示

不需要预先分配存储空间,适用于数据量变化较大的情况

    表的长度:数据结点的个数

    适用于经常进行插入和删除的操作

链接存储的存储结构所占存储空间分两部分,部分存放结点值,另部分存放表示结点间关系的指针

线性表顺序存储

不便于插入和删除的实现,而链式存储便于

适用于变化量小的情况

必须按最可能度预分存储空间,存储空间利率低,表的容量难以扩充,静态存储结构

是一种随机存取结构

适用于经常进行存取的操作

删除时的最坏情况:要删除的元素是顺序表的第一个元素

删除时的最好情况:要删除的元素是顺序表的最后一个元素

要求能够较快的插和删除,要求储存结构能够反映数据元素之间的逻辑关系则应该以顺序储存式储存

度为 n 的顺序存储的线性表中,向第 i 个元素(1<=i<=n+1)位置插⼊⼀个新元素时,需要从后向前依次后移(n-i+1)个元素

线性表一旦建立,就不能添加元素(F

最后一个元素之后插入一个元素和删除最后一个元素,采用容量足够大的顺序表

长度为n,删除第i个元素,要向前移动n-1个元素

长度为n,第i个位置插入一个新元素,时间复杂度为On

线性表是n数据元素的有限序列(所以学院组织结构表就不是线性表)

顺序线性表中有 n 个数据元素,则删除表中第 i 个元素需要移动(n-1)个元素

18.  顺序表

删除操作时,应该将表的长度-1

⼊⼀个元素所需移动的元素平均数是n+1/2

顺序表的度是指:表中数据元素的个数

个有 127 个元素的顺序表中插⼊⼀个新元素并保持原来顺序不变,平均要移动(63.5)个元素

度为 n 的顺序表中,删除值为 x 的元素时需要较元素和移动元素的总次数为n

表尾插⼊⼀个元素的时间复杂性的量级为O(1)

19.  数组

逻辑结构à线性结构

存储结构à顺序结构

维数组中有 n 个数组元素,则读取值为 x 的数据元素的平均时间复杂度为O(n)

维数组中有 n 个数组元素,则读取第 i 个数组元素的平均时间复杂度为0(1)

假定利数组 a[N]顺序存储个栈, top 表示栈顶指针,top==-1 表示栈空,并已知栈未满,当元素 x进栈时所执的操作为a[++top]= x

个具有 n 个单元的顺序栈中,假定以地址低端(即 0 单元)作为栈底,以 top 作为栈顶指针,则当做出栈处理时,top 变化为top—

20.  队列

先进先出

只能在队尾添加/插入新元素

只能在队首删除元素

论是顺序存储还是链接存储的栈和队列,进或删除运算的时间复杂性均为O(1)

顺序队进元素队时最的问题是会出现假溢出现象

队列是被限定为只能在表的端进运算,在表的另端进删除运算的线性表

当利⽤⼤⼩ N 的数组存储循环队列时,该队列的最⼤⻓度是n

个顺序循环队列中删除元素时,先需要后移队首指针

判定个队列 QU(最多元素为 m0)为满队列的条件是QU->rear QU->front = = m0

个链队列中,front rear 分别为头指针和尾指针,则插⼊⼀个结点 s 的操作为rear->next=s;rear=s;

n 个结点的双向链表中指针 p 所指向的结点之前插⼊⼀个新结点时,其时间复杂性的量级为O(1)

21. 

先进后出,后进先出

只能在栈顶插入/删除操作

向顺序栈中插新的元素分三步,分别是:断溢出或栈满栈顶指针新元给栈顶单元

从顺序栈中删除元素分三步,分别是:判断栈空 栈顶指针的值返回 修改栈顶指针

向栈中压元素的操作是:先移动栈顶指针,然后存元素

链表作为栈的存储结构则退栈操作:必须判别栈是否为空

链表作为栈的存储结构则进栈操作:对栈不作任何判别

顺序栈中在做出栈运算时,应先判别栈是否为空

顺序栈中在做进栈运算时,应先判别栈是否为满

Pushpop

设栈 S 和队列 Q 的初始状态为空,元素 e1,e2,e3,e4,e5,e6依次通过栈 S个元素出栈后即进队列 Q,若 6 个元素出队的序列是 e2,e4,e3,e6,e5,e1,则栈的容量少应该是3

个栈的输序列为:1,2,3,4,则栈的不可能输出的序列是4321

打印机à队列

判定个顺序栈 ST(最多元素为 m0)为空的条件是ST->top==0

假定个链式栈的栈顶指针 top 表示,每个结点的结构具有两个域 data next,出栈时进的指针操作top=top->next

删除空的顺序存储结构的堆栈的栈顶元素,栈顶指针 top 的变化是top=top-1

个栈顶指针为 hs 的链栈中插⼊⼀*s 结点时,应执s->next=hshs=s

顺序栈中当栈中元素为 m 时,做进栈运算时发上溢,则说明栈的可容量为m

判定个顺序栈的 S(最多元素时 m0)为满的条件是S->top==m0-1

为了增加内存空间的利率和减少发上溢的可能性,由两个栈共享⼀⽚连续的内存空间时,应将两个

栈的(栈底)分别设在这内存空间的两端,这样只有当两个栈的栈顶在栈空间的某位置相遇时才产上溢

设输序列 123n 经过栈作后,输出序列中的第个元素是 n,则输出序列中的第 i 个输出元素是n+1-i

判定个顺序栈 S(栈空间⼤⼩ n)为空的条件是S->top==0

设输序列为 123456,则通过栈的作后可以得到的输出序列为:325641

设指针变量 front 表示链式队列的队头指针,指针变量 rear 表示链式队列的队尾指针,指针变量 s 指向将要队列的结点 X,则队列的操作序列为rear->next=srear=s

解决顺序队上溢的

1、每当删除个队头元素时,则依次移动队中的元素,始终使 front 指针指向队列中的第个位置

2、采平移元素的:每当队列中加⼊⼀个元素时,队列中已有的元素向队头移动个位置

3、建⽴⼀的存储空间,但这样做会造成空间的使效率降低

4、发上溢时,动丢失多余元素(F)

22.  单链表

已知单链表尾指针,时间复杂度为O(1)

单链表中设置头结点:空表和非空表统一,算法处理一致

空的循环单链表 head 的尾结点(由 p 所指向),满条件:p->next==head

度为 n 的单链表链接在度为 m 的单链表之后的算法的时间复杂度为O(m)

个单链表中,若删除 p 所指向结点的后续结点(=单链表中指针 p 指向结点 m,若要删除 m 之后的结点(若存在),则需要修改指针的操作为),则执p->next=p->next->next;

单链表中 n 个数据结点,则读第 i 个数据结点的平均时间复杂度为On

对于个具有 n 个结点的单链表,在已知的结点*p 后插⼊⼀个新结点的时间复杂性为O(1)

单链表的判空条件

不带头结点的单链表head为空:head=null

条单链表的头指针变量为 head 且该链表没有头结点,判空:head=0

23. 

à层次

二叉树不是特殊的树,使用不是树转化过来的特殊情形

叉树与树具有相同的树形结构(F

二叉树是非线性数据结构,顺序存储结构和链式存储结构都能存储,但,不是所有的叉树树形结构都适顺序存储结构

若初始森林中共有 n 叉树,进 2n-1 次合并后才能剩下棵最终的哈夫曼树(F

标串的度为 n,模式串的度为[n/3],则执模式匹配算法时,在最坏情况下的时间复杂度是O(n2)

分支

叉树上叶节点数为 n0,双分数为,单分数为 n1,则n0=n2+1

深度

深度为 k 的完全叉树中最少有(2k-1)个结点

棵完全叉树中有 65个结点,则该完全叉树的深度为7,因为2n-1

叉树有 n 个结点,则其深度无法确定

    结点数

叉树的第 k 层的结点数最多为2k-1

叉树上第 5 层的结点数最多为16个,因为2k-1

深度为 5 叉树最少有(5)个结点

如果 T2是由有序树 T 转化来的叉树,T后序结点=T2中序结点,T前序结点=T2前序结点

设某棵叉树中有 2000 个结点,则该叉树的最⼩⾼度为11,因为210=1024<2000211=2048>2000

棵树中,每个结点最多有(1)个前驱结点

叉树中第 i(i≥1)层上的结点数最多有(2i+1)个

n 个值成的哈夫曼树中共有(2n-1)个结点.

叉树根结点的层次为 0度为 h 的满叉树中的结点个数是2n+1-1

F 是由 T1T2 T3三棵树组成的森林,与 F 对应的叉树为 BT1T2 T3 的结点数分别为 N1 N3,则叉树 B 的根结点的左树的结点数为N1-1

对含有(1)个结点的叉树,采任何种遍历式,其结点访问序列均相同

棵深度为 h 的满 k 叉树有如下性质: 第 h 层上的结点都是叶结点,其余各层上的结点都有 k .如果按层次顺序从 1 开始对全部结点编号,则各层上的结点数ki-1

实现任意叉树,m 个树叶, n 个结点,度为 1 的结点 t 个,度为 2 的结点有 p 个,则m=p+1

对于棵具有 n 个结点叉树,当进链接存储时,其叉链表中的指针域的总数为 2n,其中(n-1)个链接孩结点,(n+1)个空闲着

设深度为 k 叉树上只有度为 0和度为 2的节点,则这类叉树上所含结点总数最少2k-1

二叉树共有5种不同的形态

具有 3 个结点的叉树共有(5)种状态.

设某棵叉树中只有度数为 0 和度数为 2的结点且度数为 0 的结点数为 n,则这棵叉中共有(2n-1)个结点

叉树中,度为 0 的结点个数为 n0,度为 2 的结点个数为,则 n=n2+1

    叶子结点

设某棵完全叉树中有 100 个结点,则该叉树中有(50)个叶结点

设某棵叉树的度为 10,则该叉树上叶结点最多有512

某哈夫曼树中有 199 个结点,则该哈夫曼树中有(100)个叶结点//n+1/2

指针域

m 叉树的结点数为 n多重链表表示其存储结构,则该树中有n(m-1)+1)个空指针域

设哈夫曼树中的结点总数为m,若叉链表作为存储结构,则该哈夫曼树中总共有2m)个空指针

.

N 个结点链接存储,指针域总数 2n,链接孩结点 2n,空闲的有 n+1

    高度

对于个具有 n 个结点的叉树,当它为(完全二叉树)具有⼩⾼

具有 n(n>0)个结点的完全叉树的度为[log 2 (n+1)][log 2 n]+1

对于个具有 n 个结点的叉树,当它为棵(单分支叉树时具有最⼤⾼.

对于个具有 n 个结点的叉树,当它为单分⽀⼆叉树时具有最⼤⾼度,其度为n

    带权路径长度

    左孩子、右孩子、双亲结点

将含有 83 个结点的完全叉树从根结点开始编号,根为 1 号,后按从上到下、从左到右的顺序对结

点编号,那么编号为 41 的双亲结点编号为20

    三叉树

        在三叉链表上,叉树的求双亲运算很容易实现(F

        欲实现任意叉树的后序遍历的递归算法不必使栈结构,最佳案是叉树采(三叉链表)存储结构.

棵具有 k 层的满三叉树中,结点总数为(3k-1)/2

棵三叉树的结点数为 50,则它的最⼩⾼度为5

 

    哈夫曼树

于通信的电仅由 8个字组成,字在电中出现的频率分别为

 

根据这些频率作为权值构造哈夫曼树,则这棵哈夫曼树的度为7

先序、中序、后序遍历

前序:第个结点 A 是根结点,是后序的最后个结点

前序:树的第个结点为树根结点

中序:根据前序的根节点,判断是否有左右树。

中序:--> 根节点-->

后序:--> -->根节点

先序: 根节点-->-->

 

 

    叉树的先序遍历序列和后序遍历序列正好相反,则该叉树满的条件是结点右孩

叉树的先序遍历序列和后序遍历序列正好相同,则该叉树满的条件是空或只有个结点

    叉树的先序遍历序列和中序遍历序列正好相同,则该叉树满的条件是结点左孩

       已知叉树的前序遍历和后序遍历序列并不能惟地确定这棵树,因为不知道树的根结点是哪个。(F

任何叉树的叶结点在其先根、中根、后跟遍历序列中的相对位置肯定不发生变化

任何叉树的叶结点在先序、中序和后序遍历序列中的相对次序不发生改变

叉树结点的先根序列、中根序列和后根序列中,所有叶结点的先后顺序完全相同

叉树中,具有两个⼦⼥结点,在中序遍历序列中,它的后继结点最多只能有⼦⼥结点

叉树的前序和后序遍历序列(不能)惟确定这棵叉树

ab 叉树上的两个结点,在中序遍历时,a b 前的条件是.a b

叉树满下列条件:对任意结点,若存在左、右树,则其值都它的上所有结点的值,于右上所有结点的值.现采中根)遍历式就可以得到这棵叉树所有结点的递增序列

叉树有 n 个结点,要按某顺序对该叉树中的结点编号,(号码为 1-n),编号须具有如下性质:

叉树中任结点 V,其编号等于其左树中结点的最编号加 1.其右树中结点的最编号等于 V 的编号加 1.试问应按(中序)遍历顺序编号

叉链表上,求双亲运算的时间性能很好(F

叉判定树应用在:描述分类过程和处理判定优化等⽅⾯

    后缀表达式

   

24. 

G1=(V1,E1) G2=(V2,E2)为两个图,如果 V1ÍV2,E1ÍE2 则称.G1 G2

有向图

某有向图中有 n 个顶点,则该有向图对应的邻接表中有(n)个表头结点

对于个有向图,若个顶点的度为 k1,出度为 k2,则对应逆邻接表中该顶点单链表中的边结点数为k1-k2

图的逆邻接表存储结构只适于(有向图)图

个具有 n 个顶点的有向图中,若所有顶点的出度数之和为 s,则所有顶点的度数之和2s

个具有 n 个顶点的有向图中,若所有顶点的出度数之和为 s,则所有顶点的度数之和s

个具有 n 个顶点的有向完全图中,所含的边数为n(n-1)

8 个结点的有向完全图最多有(56)条边,因为n(n-1)

无向图

向图 G 中有 n 个顶点 e 条边,则⽤⽤邻接表作为图的存储结构进深度优先或度优先遍历的时间复杂度为O(n+e)

向图 G 中有 n 个顶点 e 条边,则其对应的邻接表中的表头结点和表结点的个数分别为n2e

设某有向图的邻接表中有 n 个表头结点和 m 个表结点,则该图中有(m)条有向边

向图 G 中有 n 个顶点 e 条边,则邻接矩阵作为图的存储结构进⾏⼴度优先遍历时的时间复杂度为O(n2)

如果 n 个顶点的图是个环,则它有(n)成树

向图G中有n个顶点e条边,则邻接表作为图的存储结构进深度优先遍历时的时间复杂度为O(n2)

图中的条路径度为 k,该路径所含的顶点数为k+1

n 个顶点的向图 G 的顶点度数的最于或者等于(n)时,G 少有条回路

在含 n 个顶点和 e 条边的向图的邻接矩阵中,零元素的个数为n2-2e

对于个具有 n 个顶点和 e 条边的向图,若采邻接表表示,则表头数量为n

对于个具有 n 个顶点和 e 条边的向图,若采邻接表表示,则所有邻接表中的结点总数是2e

向图有 n 个顶点和 e 条边,则所有顶点的度的和为2e

一个无向图有 n 个顶点和e 条边,则该向图中所有顶点的度之和为2e

个具有 n 个顶点和 e 条边的向图的邻接矩阵中,表示边存在的元素(称为有效元素)的个数为2e

假设个有n个顶点和e条弧的有向图邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是O(n+e)

个具有 n 个顶点的向图中,要连通全部顶点少需要n-1条边.

向图 G 中有 n 个顶点,则该向图的最⼩⽣成树上有(n-1)条边

个具有 n 个顶点的有向图最多有(n(n-1))条边

个具有 n 个顶点的向完全图的边数为n(n-1)/2

设某向图中有 n 个顶点 e 条边,则建该图邻接表的时间复杂度为O(n+e)

向图 G(如下图所示),则其最⼩⽣成树上所有边的权值之和为8

向图中定义顶点 vi vj 之间的路径为从 vi vj 顶点序列

    路径长度

        Dijkstra 算法求某顶点到其余各顶点间的最短路径是按路径度(递增)的次序来得到最短路径的

        关键路径是事件结点络中的从源点到汇点的最路径

     

邻接表

    邻接表是图的种链式存储

    连通图

n 个顶点的连通图少(n-1)条边

具有 6 个顶点的向图少应有(5)条边才能确保是个连通图

个连通图中存在着(1)个连通分量

设某强连通图中有 n 个顶点,则该强连通图中少有(n)条边

具有 50 个顶点的向图少应有(49)条边才能确保是个连通图

对于个具有 n 个顶点的向连通图,它包含的连通分量的个数为1

如果从向图的任顶点出发进⾏⼀次深度优先搜索即可访问所有顶点,则该图定是连通图

任何向连通图的最⼩⽣成树有一棵或多棵

广度优先遍历和深度优先遍历

度优先遍历类似于叉树的层次遍历

个图的边集为{A,B,(A,C),(B,D),(C,F),(D,E),(D,F)},则从顶点 A 开始对该图进深度优先搜索,得到的顶点序列可能为A,C,F,D,E,B

已知图的邻接矩阵同下图所示,根据算法,则从顶点 0 出发,按度优先遍历的结点序列是0 1 2 3 4 6 5

已知图的邻接表如下所示,根据算法,则从顶点 0 出发按度优先遍历的结点序列是 0 3 2 1

已知图的邻接表如下所示,根据算法,则从顶点 0 出发按深度优先遍历的结点序列是 0 1 2 3

图的边集

个图的边集为{<0,1>3,<0,2>5,<0,3>5,<0,4>10,<1,2>4,<2,4>2,<3,4>6},则从顶点 v0到顶点 v4共有(4)条简单路径

个图的边集为{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},则从顶点 1开始对该图进⾏⼴度优先搜索,得到的顶点序列可能为1,2,4,5,3

    拓扑排序

拓扑排序:可以判断出个有向图中是否有环(回路)

个有向图的拓扑序列有一个或多个

稠密图、稀疏图(普里姆和克鲁斯卡尔)

        (Prim)算法求具有 n 个顶点 e 条边的图的最⼩⽣成树的时间复杂度为n2

若要求稠密图 G 的最⼩⽣成树,最好(普里姆) 算法来求解.

若要求稀疏图 G 的最⼩⽣成树,最好(克鲁斯卡尔) 算法来求解.

设有稠密图 G,则 G (矩阵)存储较省空间.

设有稀疏图 G,则 G (表)存储较省空间

领接矩阵

        向图的邻接矩阵是个对称矩阵

已知个图的邻接矩阵表示,计算 i 个结点的法是:求矩阵第 i 零元素之和

已知个图的邻接矩阵表示,删除所有从第 i 个结点出发的边法是:将矩阵第 i 全部置为 0

带权有向图 G 邻接矩阵 A 存储,则顶点 i 等于 A i ⾮⽆穷的元素个数之和

深度优先遍历类似于叉树的先序遍历

图的深度优先遍历序列不唯一

邻接表表示图进深度优先遍历时,通常是采()来实现算法的

邻接表表示图进⾏⼴度优先遍历时,通常是采(队列)来实现算法的.

对于具有 n 个顶点的图,若采邻接矩阵表示,则该矩阵的⼤⼩n2

有向图 G 邻接矩阵存储,其第 i 的所有元素之和等于顶点 i 出度

拓扑排序算法是通过重复选择具有(0)个前驱顶点的过程来完成的。//拓扑à没有前驱的

    图遍历

        连通图不能深度优先搜索法(F

    顶点与边

        个图中,所有顶点的度数之和=所有边数

        设某完全向图中有 n 个顶点,则该完全向图中有(nn-1)/2条边

25.  排序

大多数排序算法都有两个基本的操作:比较和移动

设需要对 10个不同的记录关键字进排序,则少需要较(9)次

排序的的是为了以后对已排序的数据元数进查找)操作

直接插排序和冒泡排序的时间复杂性为 O, 若初始数据有序(即正序),则时间复杂性为On

初始值

选择排序/简单选择排序/直接选择排序

在直接插和直接选择排序中,若初始数据基本反序,则选直接选择排序

在所有的排序法中,关键字的较次数与记录的初始排列关的是直接选择排序

个由 n 个整数组成的序列,借助排序过程找出其中的最值,希望较次数和移动次数最少,应选

直接选择排序)

关键字的较次数与记录的初始排列

在直接选择排序中,记录较次数为 O)数量级,记录的移动次数为O(n)数量级.

将上万个序并且互不相等的正整数序列,存放于顺序存储结构中,采选择排序法能够最快地找出其中最的正整数

前以较操作为基础的内部排序的时间复杂性 T(m)的范围是 Onlog2n)~ O),其较次数

与待排序记录的初始状态关的是(直接选择)排序

排序法中,从未排序序列中挑选元素,并将其依次放已排序序列(初始时为空)的端的法,称

选择排序

插入排序/直接插入排序

    n 个元素进直接插排序时间复杂性为n2

组初始记录关键字的度为 8,则最多经过(7)趟插排序可以得到有序序列.

在对 n 个元素进直接插排序的过程中,共需要进n-1)趟.

当初始序列已按健值有序时,直接插算法进排序,需要较的次数为n-1

直接插排序算法的平均时间复杂度为O(n²)

排序法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进⾏⽐较,将其放

已排序序列的正确位置上的法,称为插入排序

对于直接插排序、冒泡排序、简单选择排序、堆排序、快速排序,当件“局部有序”或度较

的情况下,最佳的内部排序法是直接插入排序

冒泡排序

   n 个元素的序列进冒泡排序,在降序的情况下较次数最多,其较次数为(n(n-1))/2

    n 个元素的序列进冒泡排序,最少的较次数是 n,此时元素的排列情况是已从排列

    n 个元素的序列进冒泡排序,最少的较次数是 n,此时元素的排列情况是升序

    n 个元素的序列进冒泡排序,其较次数为 nn-1/2时,其原始数据序列是(降序)情况

    对n个不同的排序码进升序冒泡法排列,排列好的较的次数最多

对n个不同的排序码进冒泡排序,在元素序的情况下较的次数为(n(n-1))/2

排序时扫描待排序记录序列,顺次较相邻的两个元素的⼤⼩,逆序时就交换位置,这是冒泡排序的

本思想

n 个元素的序列进冒泡排序,在(降序)的情况下较次数最多

n 个元素的序列进冒泡排序,最少的较次数是n-1

    在对组有 8 个记录的数据表进冒泡排序时,在整个排序过程中共需进(7)趟才可完成.

    件局部有序或度较的情况下,最佳的排序法是冒泡排序

快速排序

    快速排序是对序列中的元素通过适当的位置交换将有关元素次性地放置在其最终位置上

    最坏的情况下的时间复杂度是O(n²)

    在最坏情况下(如初始记录已有序),快速排序的空间复杂性为n

    在对 n 个元素进快速排序的过程中,最好情况下需要进log 2 n)趟

快速排序在(被排序的数据已基本有序)情况下最不利于发挥其.

在堆排序,快速排序和归并排序中,若从平均情况下排序最快,则应先选取(快速排序

    在堆排序中、快速排序和归并排序中,若从节省存储空间考虑,排在中间的是(快速排序

 

每次把待排序的元素划分为左、右两个区间,其中左区间中元素的关键字均于等于基准元素的关键字,右区间中元素的关键字均于等于基准元素的关键字,则此排序法叫作快速排序

快速排序算法的平均时间复杂度为O(nlog 2 n)

归并排序

    依次将每两个相邻的有序表合并成个有序表的排序法叫作归并排序

在归并排序过程中,需归并的趟数为log2n

   

    若对 n 个元素进归并排序,则进趟归并的时间复杂度为n

    路归并排序的时间复杂度为(nlog2n)

在归并排序中,归并趟数的数量级表示为Olog2n)

在内部排序中,要求附加的内存容量最的是归并排序

组初始记录关键字序列为(25501535808520403670),其中含有 5度为 2 的有序表,则归并排序的法对该记录关键字序列进⾏⼀趟归并后的结果为15253550204080853670

在归并排序中,若待排序记录的个数为 20,则共需要进 5趟归并,在第 3趟归并中,是把度为 4

有序表归并为度为4的有序表

希尔排序

组初始记录关键字序列为(9876543210),则以增量 d=5 趟希尔排序结束后前 5条记录关键字为43210

趟排序结束后不定能够选出个元素放在其最终位置上的是希尔排序

希尔排序的增量序列必须是递减

堆排序

在堆排序中、快速排序和归并排序中,若只从最坏的情况下排序最快并且要节省内存考虑,应选堆排序)

时间复杂度不受数据初始状态影响恒为 O(nlog2n)的是堆排序

在任何情况下,时间复杂度均为 O(nlog2n)的不稳定的排序法是堆排序

已知个链表中有 3000 个结点,每个结点存放个整数,(堆排序方法)于解决这 3000个整数的排序问题且不需要对算法作的变动

设有 1000 序的元素,希望最快的速度挑选出其中前 10 个最的元素,最好选)排序法

交换排序

        当两个元素较出现反序时(即逆序)就相互交换位置的排序法叫作交换排序

基数排序

   

        如果将所有中国按照⽣⽇来排序,则使基数排序)算法最快

比较排序的稳定和快慢

时间复杂度

       

       

关键字序列

26.  查找

    二分查找

   

posted on 2022-06-23 22:42  铃木奈奈  阅读(548)  评论(0编辑  收藏  举报