软考软件设计师学习笔记(三)

三、上午题 #3 数据结构

1. 大O表示法

        

        1)加法规则:多项相加,保留最高阶项,并将系数化为1

        2)乘法规则:多项相乘都保留,并将系数化为1

        3)混合规则:小括号>乘法规则>加法规则

        例如:

        T(n) = 5n^3 + 6n^2 + 7n + log2n + 20 的时间复杂度是O( n^3)

        渐进符号

        (1)O记号:渐进上界        O > n^3

        (2)Ω记号:渐进下界        Ω < n^3

        (3)Θ记号:渐进紧致界        O = n^3        Ω = n^3

        例题

        

2. 递归式时间、空间复杂度

       1.展开式  在每次地柜的事件复杂度不变的情况下:        

        递归式的时间复杂度 =  递归的次数 × 每次递归的时间复杂度

        2.主方法,也称为主定理(***天书,看不懂o(╥﹏╥)o***)

  

        3. 真题

        1、

        解析:题干说的是重复次数,T(n)是作为循环次数的条件

        2、        

        解析:

        3、

        

3 线性结构

        线性结构是一种基本的数据结构,主要用于对客观世界中具有单一前驱和后继的数据关系进行描述。

        线性结构的特点是数据元素之间呈现一种线性关系,即元素“一个接一个排列”。

        1. 线性表

        一个线性表是n(n>0)个元素的有限序列,通常表示为(a1,a2,......,an),非空线性表            的特点如下:

        (1)存在唯一的一个称作“第一个”的元素

        (2)存在唯一一个称作“最后一个”的元素

        (3)除第一个元素外,序列中的每个元素均只有一个直接前驱

        (4)除最后一个元素外,序列中的每个元素均只有一个后驱

        2. 线性表的存储结构

                线性表的存储结构分为顺序存储和链式存储

        1)线性表的顺序存储

                指用一组地址连续的存储单元一次存储线性表中的数据元素

                特点:逻辑上相邻的两个元素物理地址也相邻,元素间的逻辑关系无须占用额外的空间

        ①顺序表的优缺点

                优点:可以随机存取表中的元素

                缺点:插入和删除操作时可能要移动元素

                在表长为n的线性顺序表中插入新元素,移动元素个数的期望为

                

                在表长为n的线性顺序表中删除元素,移动元素个数的期望为

        

        ②顺序表插入删除的时间复杂度

                最好的情况:尾部插入 O(1)

                最坏的情况:头部插入 O(n)

                平均: O(n)

        ③顺序表查找及时间复杂度:O(1)

        2)线性表的链式存储

                线性表的链式存储是用通过指针链接起来的节点来存储数据元素,其结构包括数据域和                  指针域。

        特点:数据域用于存储元素的值,指针域存储当前元素的直接前驱或直接后继的位置信息

                  存储各数据元素的节点的地址不需要是连续的,节点空间只有在需要时才申请。

        ①链式表的优缺点

                优点:插入快

                缺点:查询慢

        ②单链表插入删除的时间复杂度

                最好的情况:头部插入 O(1)

                最坏的情况:尾部插入 O(n)

                平均: O(n)

         ③单链表查找及时间复杂度

                最好的情况:O(1)

                最坏的情况:O(n)

                平均: O(n)

        3)循环单链表

                尾节点指针域指向头结点

        4)双链表

                每个节点有两个指针,分别指向直接前驱和直接后继

4. 栈

       1. 定义:栈是只能通过访问它的一端来实现数据存储和检索的线性数据结构。

                   栈又称为后进先出的线性表,不含元素的栈称为空栈

                    在栈中进行插入和删除的一端称为栈顶(TOP),另一端称为栈底(Bottom)

        特点:先进后出,后进先出

        入栈(Push(S,x)):将元素x加入栈顶,并更新栈顶指针

        出栈(Pop(S)):将栈顶元素从栈中删除,并更新栈顶指针。

        递归需要用到栈

        2. 共享栈:两个栈共享一片存储空间,这片空间不单独属于任何一个栈,某个栈需要带的多                            一 点,它就可能得到更多的存储空间。

    

        特点:栈底在两端,栈顶在中间

        栈空:top1 = -1        top2 = maxsize

        栈满:top1 = top2

5. 队列

        (1)定义:队列是一种先进先出的线性表,只允许在表的一端插入元素(队首Front),在                               表的另一端删除元素(队尾Rear)

                           队首Front 指向的是队首元素的前一个位置

                           队尾Rear 指向的是队尾的最后一个元素

        (2)队列的存储结构

                1)顺序存储:也叫顺序队列,是用一组地址连续的存储单元存放元素,插入删除在两                                           端进行,因此设置队首指针和队尾指针,分别指出队首和队尾

                2)循环队列:首尾相接的数组结构

                                                

                3)队列的基本运算

                        ①初始化队列initQueue(Q):创建一个空的队列Q

                        ②判队空 isEmpty(Q):当队列为空时返回true

                        ③入队 EnQueue(Q,x):将元素x插入到队列Q的队尾,并更新队尾指针

                        ④出队 DelQueue(Q):将队首元素从队列Q删除,并更新队首指针

                        ⑤读队首元素 FrontQue(Q):返回队头元素的值,但不更新队首指针

                4)队列的链式存储

                5)双端队列

        (4)难题

                1、

                2、

        

                3、

        

6. 串

        (1)定义:串是仅由字符构成的有限序列,是一种特殊的线性表,一般记为

                                S = 'a1a2a3......an'

        (2)空串:长度为零的串

        (3)空格串:由一个或多个空格组成的串

        (4)子串:由串种任意长度的连续字符构成的序列称为子串

        (5)串的模式匹配的时间复杂度

                主串 n               模式串 m 

                最好:O(m)        最坏:O((n-m+1)×m)        平均:O(n+m)

        (6)串的前缀:包含第一个字符并且不包含最后一个字符的子串

                 串的后缀:包含最后一个字符并且不包含第一个字符的子串

                 第 i 个字符的next值 = 从1 ~ i - 1串种最长相等前后缀的长度 + 1

                 特殊情况:next[i] = 0

7. 数组

        (1)一维数组(略)

        (2)二维数组

               1) 二维数组的存储位置

                     二维数组 a[n] [m], 首地址为Loc,单元存储大小为L

                     按行优先存储时,元素a[i] [j]的存储位置为

                     下标从0开始:           Loc + (i×m + j)×L

                     下标从1开始:           Loc + ((i-1)×m + (j-1))×L

                     按列优先存储时,元素a[i] [j]的存储位置为

                     下标从0开始:           Loc + (j×n + i)×L

                     下标从1开始:           Loc + ((j-1)×m + (i-1))×L

        (3)稀疏矩阵的三员组表的顺序存储结构称为三元组顺序表,常用的三元组表的链式存储                     结构是十字链表

        (4)解题技巧:直接把前几个元素下标代入答案里面算

8.树

        (1)树结构是一种非线性结构(一个元素可以有两个以上的直接后继元素)

                定义:树是n(n>=0)个节点的有限集合,当n=0时称为空树。在任一非空树种,有且仅                              有一个称为根的节点;其余节点可分为m(m>=0)个互不相交的有限子集                                          T1T2,.......Tn,其中,每个Ti又都是一个树。

                树的定义是递归的,它表明了树本身的固有特性,也就是一棵树由若干颗子树构成,而                  子树又由更小的子树构成。

        (2)树的基本概念

                ①根节点、父节点、子节点、兄弟节点,

                ②节点的度:该节点的子节点个数

                    树的度:节点度的最大值

                ③叶子结点:也称为终端节点,指度为0的节点

                ④分支节点:也称内部节点,指度不为0的节点

                ⑤节点的层次:根为第一层,根的孩子为第二层,依此类推

                ⑥树的高度:一棵树的最大层数记为树的高度

        (3)树的性质

                ①树种的节点总数等于树中所有节点的度数之和+1(+根节点)

                ②度为m的树中第i层上最多有m^(i -1)个节点(i>=1)

                ③高度为h的m次树最多有(m^h - 1)/m-1个节点

                ④具有n个节点,度为m 的树的最小高度为[logm(n(m-1)+1)]

        (4)二叉树

                1)定义

                二叉树是n(n>=0)个节点的有限集合,它或者是空树,或者是由一个根节点及两棵不想                    交的且分别成我左右子树的二叉树所组成。二叉树同样有递归性质

                特点:二叉树节点的度最大为2,即使节点只有一个子树也要指出是左还是右子树。

                2)性质

                        ①二叉树的第i层上最多有2^(i-1)个节点

                        ②高度为h的二叉树最多有2^h - 1

                        ③对于任何一颗二叉树,度为0的节点数等于度为2的节点数+1

                        ④具有n个节点的完全二叉树的高度为(log2 n )+1或log2 (n+1)

                3)满二叉树

                        若深度为k的二叉树有2^k -1个节点,则称其为满二叉树

                4)完全二叉树

                        深度为k,有n个节点的二叉树,当且仅当其每一个节点斗鱼深度为k的满二叉树编                          号从1至n一一对应时,称其为完全二叉树。

                        在一个高度为h的完全二叉树中,除了最后一层,都是满节点,在第h层必须从左                            到右依次放置叶子结点,否则是非完全二叉树

                        假设有编号为 i 的节点,总节点个数为n的完全二叉树则有:

                        ①若i=1,则该节点为根节点,无双亲,若i>1,则该节点的双亲节点为i/2向下取整

                        ②若2i < n,则该节点的左孩子节点编号为2i,否则无左孩子节点

                        ③若2i +1< n,则该节点的右孩子节点编号为2i+1,否则无右孩子节点

                5)二叉树的顺序存储I结构

                      完全二叉树采用顺序存储结构既简单又节省空间,对于一般二叉树,则不宜采用顺                        序存储结构,可能会存一些虚浪费空间

                      最坏的情况下,一个深度为k且只有k个节点的二叉树(单支树)需要2^k-1个存储单                        元。

                6)二叉树的链式存储结构

                     由于二叉树的节点包含数据元素、左子树的根、右子树的根及双亲等信息,新词可                         以用三叉链表或二叉链表来存储二叉树,链表的头指针指向二叉树的根节点

                7)二叉树的遍历算法

                        ①先序遍历:根左右

                        ②中序遍历:左根右

                        ③后序遍历:左右根

                        ④层次遍历:从上往下,从左往右

                8)平衡二叉树

                        二叉树中的任意一个节点的左右子树高度之差的绝对值不超过1

                9)二叉排序树(二叉查找树、二叉检索树)

                        根节点的关键字

                        ①大于左子树所有节点的关键字

                        ②小于右子树所有节点的关键字

                        ③左右子树也是一个二叉排序树

                        ④中序遍历得到的序列是有序序列

                10)最优二叉树(又称为哈夫曼树

                        最优二叉树又称为哈夫曼树。它是一类带权路径长度最短的树。路径是从树中一                            个节点到另一个节点之间的通路,路径上的分支数目称为路径长度。

                        树的带权路径长度为树中所有子节点的带权路径长度之和,记为

                11)最优二叉树的构造

                        构造规则:

                        ①从前往后找两个最小的权值

                        ②小左大右

                        ③加入末尾

                        ④权值相同,取前面两个

                        特点:

                        ①只有度为0、2的节点

                        ②总节点个数2n+1         

                12)哈夫曼编码(霍夫曼编码)

                        若对每个字符编制相同长度的二进制码,则称为等长编码。

                        例如

                         

                        a:0        b:101        c:100        d:111        e:1101        f:1100

                13)线索二叉树 干扰选项 不要选

        (5)真题易错

                1、

                2、

9. 图

        (1)图的定义

                 图G是由集合V和E构成的二元组,记作G=(V,E),其中,V是图中顶点的非空有限                   集合,E是图中边的有限集合。图中的任一顶点都有可能与其他顶点有关系。

                

        (2)有向图

                若图中每条边都是有方向的,那么顶点之间的关系用<vi,vj>表示,它说明从vi到vj有一                    条 有向边(也称为弧)。vi是有向边的起点,称为弧尾;vj称为有向边的终点,称为弧                  头。

        (3)无向图

                若图中的每条边都是无方向的,那么顶点之间的关系用(vi,vj)表示。因此,有向图中的                    <vi,vj>和<vj,vi>分别表示两条边,而在无向图中的(vi,vj)和(vj,vi)表示同一条边

        (4)完全图

                若一个无向图具有n个顶点,而每一个顶点与其他n-1个顶点之间都有边,则称之为无向                  完全图。显然含有n个顶点的五香完全图共有n(n-1)/2条边。类似地,有n个顶点的有向                  完全图中的弧的数目为n(n-1),即任意两个顶点之间都有方向相反的两条弧存在。

        (5)顶点的度

                度:无向图里指关联于顶点边的数量,有向图指定点的出度和入度之和

                出度:以该顶点为起点的有向边的数目

                入度:以该顶点为终点的有向边的数目

                无论是有向图还是无向图,定点数n、边数e与各顶点的度D(vi)之间有以下关系

                                                        

        (6)路径

                第一个顶点和最后一个顶点相同的路径称为回路或环。

                若一条路径上除了vp和vq可以相同外,其余顶点均不相同,则称其为简单路径。

        (7)连通图

                在无向图G中,若从顶点vi到顶点vj有路径,则成顶点vi和vj是连通的。如果无向图G中                    任意两个顶点都是连通的,则称其为连通图。无向图G的极大联通子图称为连通分量。

                顶点数为n,最少有n-1条边,最多有n(n-1)/2条边

        (8)强连通图

                在有向图G中,若果对弈每一对顶点vi,vj ∈ V且vi≠vj,从顶点vi到顶点vj和从vj到vi都存                  在路径,则称图G为强连通图。有向图中的极大连通子图称为有向图的强连通分量。

                顶点数为n,最少有n条边,最多有n(n-1)条边

        (9)图的存储结构

                图的基本存储结构有邻接矩阵表示法和邻接链表表示法两种。

                1)邻接矩阵表示法

                图的邻接矩阵表示法是指用一个矩阵来表示图中顶点之间的关系。对于具有n个顶点的                    图G=(V,E),其邻接矩阵是一个n阶方阵,且满足:

                

                由邻接矩阵的定义可知,无向图的邻接矩阵是对称的,有向图的邻接矩阵则不一定对                      称。

                2)邻接链表表示法

                邻接链表表示法指的是为图的每个顶点建立一个单链表。

                3)稠密图与稀疏图

                稠密图:边多的图,用邻接矩阵存,例如完全图

                稀疏图:边少的图,用邻接链表存

        (10)网

                边或弧带权值的图称为网

        (11)图的遍历

                指从某个顶点出发,沿着某条路径对图中的所有顶点进行访问且只访问一次的过程

                1)深度优先遍历(Depth First Search, DFS)

                深度优先遍历图的过程实质上是对某个顶点查找其临界点的过程,其耗时取决于所采用                  的存储结构。

                采用的是递归的思想。

                2)深度优先遍历的时间复杂度

                由n个顶点,e条边的图

                邻接矩阵:O(n^2)                邻接表:O(n+e)

                3)广度优先搜索(Breadth First Search,BFS)

                用队列实现的,会先访问每个顶点的所有邻接点

                时间复杂度与深度优先遍历是一样的

        (12)拓扑排序

10. 查找

静态查找表有:顺序查找,拆半(二分)查找,分块查找

动态查找表有:二叉排序表,平衡二叉树,B_树,哈希表

        (1)拆半查找(二分查找)

                要求表顺序存储,关键字有序排列

                最多比较的次数:log2 n向下取整 +1

                平均查找长度 log2 (n+1) -1

        (2)真题

                1、

                2、

                3、

        (3)哈希表

                1)哈希函数的构造方法

                        直接定址法、数字分析法、平方取中法、折叠法、随机算法和除留取余法

                2)处理冲突的方法

                        开放定址法

                        Hi = (H(key)+di)%m      i = 1,2,3......,k(k<m-1)

                        ①d = 1,2,3......,m-1,称为线性探测法

                        ②d = 1^2,-1^2,2^2,-2^2......±k^2,称为二次探测法

                        ③d = 伪随机序列,称为随机探测法

                        其中,最简单的是线性探测,也就是发生冲突时,顺序地到存储区的下一个单元                            进行探测

                        链地址法

        (4)真题

                1、

        (5)小顶堆和大顶堆

                n个关键码构成的序列{k1,k2,......,kn},当且仅当满足下列关系时称为堆

                小顶堆:ki <= k2i && ki <= k(2i+1)

                大顶堆:ki >= k2i && ki >= k(2i+1)

                真题1

11.排序

        

        (1)直接插入排序

        能归位

        真题1

        (2)简单选择排序

        能归位

        (3)堆排序

        能归位

        大根堆排完        序之后是一个递增的序列

        小根堆排完序之后是一个递减的序列

        (4)冒泡排序

        能归位

        (5)快速排序

        能归位、分治的思想,递归的算法

        真题1

        (6)归并排序

        不能归位,分治法,递归

        真题1

        真题2

12. 杂题

        1、

        2、

        3、

        4、

        5、

        6、

        7、

                        

                

                        

                

                

                 

                

          

                

                

                

                        

        

       

                   

          

               

        

       

        

       

        

        

        

        

        

        

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值