数据结构与算法知识点总结

存储结构:

逻辑结构:

集合:元素之间没有任何逻辑关系

线性结构:

线性表:

功能受限的表:

 

 非线性的结构:

树:

 

二叉树的性质:

    性质1:二叉树的第i层上至多有2^(i-1)(i≥1)个节点。

        满二叉树:每层的节点数都是2^(i-1)

        完全二叉树:

        1、深度为k,有n个节点的二叉树当且仅当齐每一个节点都与深度为k的满二叉树编号从1到n的节点一一对应时。

        2、除了最后一层外,其余每一层都是满的,最后一层的节点必须从左到右分布。

        3、如果所有的节点都满足从上到下、从左到右分布,就是满二叉树。

    性质2:深度为h的二叉树中至多含有(2^h)-1个节点。

    性质3:若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1。

    性质4:具有n个节点的完全二叉树深为log2x+1(其中x表示不大于n的最大整数)。

    性质5:若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:

    当i=1时,该节点为根,它无双亲节点。

    当i>1时,该节点的双亲节点的编号为i/2。

    若2i≤n,则有编号为2i的左节点,否则没有左节点。

    若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点。

二叉树的分类:

二叉树的存储:

二叉树的遍历:

 二叉树的操作:构建、销毁、插入、遍历、高度、密度、删除、求根、求左右

 

图:有穷且非空的顶点与顶点之间的边组成的集合

无向图:

        边用(A,B)方式表示,点与点之间是互通的

        在无向图中任意两个顶点之间都有边,该图称为无向完全图,则含有n个顶点的无向完全图有 n*(n-1)/2 条边

    有向图:

        边用<A,B>方式表示,仅表示从A点到B点有边,有向图的边也叫做弧,A是弧尾,B是弧头

        在有向图中任意两个顶点之间都有两条方向相反的弧,这种图称为有向完全图

        含有n个顶点的有向完全图有 n*(n-1) 条边

注意:不讨论顶点到自身的边,而且也不讨论重复出现的边,这种图叫简单图,数据结构中只研究简单图

图中点多边少:叫做稀疏图,反之叫做稠密图。

图中顶点到顶点之间的边如果带上数据,这些数据叫做边的权重,带权重的图称为带权图,也叫网。

各种图的定义:

 

    路径:从顶点到另一个顶点,经过的边叫做路径,边的数量叫做该路径的长度。

    环:图中有某个顶点最后能通过边绕回该点

    回路:专指有向图,从某点出发,最终又有弧能够回到该点,如果某点只有输出,没有输入时,该点一定没有回路

    注意:顶点序列中不重复出现的路径称为简单路径

存储结构和图的遍历:

算法:算法是解决特定问题求解决步骤的描述,再计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 

基本定义:输入、输出、又穷性、确定性、可行性
 输入:算法具有零个或多个输入
 输出:算法至少有一个或多个输出
 有穷性:指算法再执行有限的步骤之后,自动结束而不会出现无心循环,并且每一个步骤再可接受的时间内完成
 确定性:算法的每一个步骤都具有确定的意义,不会出现二义性
 可行性:算法的每一步都必须是可行的,也就是说,每一步都能通过执行有限次数完成

查找算法:


 

排序算法:

 冒泡:

        数组左右进行比较,把最大的数据交换到最后。

        特点:该算法堆数据的有序性敏感,在排序过程中发现数据有序,可以立即停止,

        如果待排序的数据基本有序时,冒泡的效率非常高。

        时间复杂度:最优:O(n) 平均(最差):O(n²)

        稳定的

选择:

        假定最开始的位置是最小值,并记录下标min,然后与后面的数据比较,如果有比min下标的数据更小,

        则更新min,最后如果min的值发生变化,则交换min为下标的数据与最开始位置的数据

        与冒泡相比:交换次数少,运行速度较快

        是冒泡的一种变种,但对数据的有序性不敏感,因此数据较混乱时比冒泡快

        时间复杂度:O(n²)

        不稳定的 eg. [10 10 1]

    插入:

        把数据看成两部分,一部分是有序的,把剩余部分的数据逐个插入,知道插完就全部有序了。

        适合对已经排序好的数据,新增数据并重新排序

        时间复杂度:O(n²)

        稳定的

    希尔:

        是插入排序的升级版,由于插入排序时,数据移动的速度比较慢,所以增加了增量的概念,

        以此提高排序的速度,数据量越多,比插入的速度越快。

        时间复杂度:O(n²)

        不稳定的

 

    快速:

        找到一个标杆,备份标杆的值,一面从左边找比标杆大的数,将找到的数据赋值给标杆位置,更新标杆放入位置到左左标杆处,在从右边找比标杆小的数据,如果找到也把数据赋值给标杆位置,更新标杆的位置到右标杆处,多次重复以上过程,直到左右标杆相遇,最后在相遇处还原标杆的值,最终达到标杆左右两边整体有序,然后按照同样的方法去排序左,右部分,最终全部有序。

它的综合性能最优,因此叫做快速排序,笔试中考的比较多的排序算法

时间复杂度:O(nlog)

    

    归并:

        先把待排序的数据拆分成单独的个体,然后按照从小到大的顺序合并复制到临时内存中,

        最终全部合并结束后再从临时内存赋值给原内存。

        由于需要使用额外的内存空间,因此避免了数据交换时的耗时,是一种典型的用空间换时间的算法

        时间复杂度:O(nlogn)

        稳定的

    堆:

        把数据当做完全二叉树,然后把树调整成大顶堆,再把根节点的数据交换到最后,然后数量-1,

        然后剩余部分重新调整成大顶堆,重复以上步骤,直到数量为1时结束

        

    计数:

        先找出数据中的最大值、最小值,创建哈希表,用 最大值-最小值+1 作为哈希表的长度,

        使用 数据-最小值 作为哈希表的下标访问哈希表并标记+1;然后遍历哈希表,当表中的值非零时,

        把该 下标+最小值 还原会原来的数据依次放回原数组中,最终排序完成。

        是一种典型的用空间换时间的算法,该算法理论上速度可以非常快,但是有很大的局限性,适合排序整型数据,

        而且数据的差值不宜太大,否则会非常浪费内存,适合数据较为平均,重复数较多的排序

        时间复杂度 O(n+k)    

        稳定的

    桶:

        把数据根据值的范围,存储到不同范围的桶中,然后调用其它的排序算法,对桶中的数据进行排序,

        排序结束后再拷贝回原数组中,以此降低排序规模来降低排序的时间,是一种典型的以空间换时间的算法。

        缺点:如何分桶、桶的范围定义多大,这些都需要对数据有一定的了解

        时间复杂度 O(n+k)

        稳定的

    基数:

        是桶排序的具体实现,首先创建10个队列,然后逆序计算出数据的个十百千...位,然后按照每位对应的数据

        压入到对应的队列中,某位入队结束后,按照队列的顺序出队储存回原数组中

 

 

 

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值