数据结构基础知识梳理

一、数据结构与算法的概念


    1、数据结构

描述从现实抽象   数据模型,即数据关系的抽象
        (1)逻辑结构:数据之间的逻辑关系
            a.表、队列、栈:线性结构        一一对应
              b、树:           非线性结构      1对多
              c、图:          非线性结构       多对多
        (2)存储结构:对数据以及   数据关系的存储
            连续存储:将所有数据放在一起     数组
            离散存储:数据可能分布在内存的不同位置

    2、算法


        不是简单的数值操作   而是一些逻辑操作 , 对数的操作
        增:增加数据
        删:删除数据
        改:修改数据
        查:查找   遍历数据
        算法就是对某个动作的操作流程或步骤

        (1)算法的特性:
        a、可行性   
        b、确定性
        c、有穷性
        d、有一个或多个输入
        e、有一个或多个输出
        (2)算法优劣评判:
              时间复杂度:语句执行的频度      与算法程序的时间没有必然关系
              执行的频度:算法中语句执行的次数 与 输入问题规模的  比值
              度量一个算法的时间复杂度 通常使用  量级表示
        (3)常见时间复杂度  量级
              最好  O(1)常量级 算法语句对的执行次数与输入问题规模无关
              较好      O(log n)对数级
                           O(n)线性级
              一般      O(n*log n)
              较差      O(n^2)     平方级
                           O(2^n)   指数级
               差         O(n!)   阶乘级

         (4)空间复杂度:占用内存的多少

二、常见的数据结构———表

     表(线性结构):  数据是连续排列的
     每个节点(除头尾),都有且只有一个前驱 和后继节点
     头节点  只有后继
     尾节点  只有前驱
            节点:数据逻辑的最小单元
     c语言的 数组就是表结构


      存储结构


          顺序存储 :数组存储
                    顺序表:存储时 连续存储,逻辑是表结构
         离散存储:链式存储
                   链表:存储使用  离散存储,逻辑上是表结构

对表的一些操作:

        增:增加节点,插入数据

        删:删除节点

        改:修改数据

        查:查询/遍历数据

链表与顺序表的优劣:

        链表:
    链表根据节点长度动态分配,没有长度限制
    链表的插入和删除节点,时间复杂度比顺序表优秀 不会存在大片数据整体移动
    
         顺序表:
    存储密度高  不会有指针域浪费空间
    顺序表的随机访问效率高    

三、常见的数据结构——队列


    队列是一种特殊的线性表,规定了表的入口和出口   同时 先进先出(多用于 缓冲)
    队列的实现:
        顺序存储的队列:循环队列
        离散存储的队列:链式队列、


循环队列的一些操作:

    1. 创建空队列 
    2. 销毁队列 
    3. 入队 
    4. 出队
    5. 置空队列 
    6. 判空判满 
    7. 获得队列长度    
        

四、常见的数据结构——栈


    栈是 一种特殊 的 线性表, 
    只能在栈的 一端 进行插入和删除 ,且  后进先出  
    
    顺序栈 :  数组   从数组尾部进行插入和删除 
    链式栈 :  链表   从头部插入和删除


4种类型的栈:

    
    增栈 : 入栈时  栈顶指针 向大地址方向移动 
    减栈 : 入栈时  栈顶指针 向小地址方向移动 
    空栈 : 栈顶指针 指向的位置数据 无效(空) 
    满栈 : 栈顶指针 指向的位置数据 有效(满)

        

    五、常见的数据结构——树    

  1、树的定义

        一个节点 有0个或多个 直接后继 节点 ,有1个(子节点)或 0个(根节点) 直接前驱  ,不能有环结构。

 根节点:       树的起始位置  一棵树 一定有根节点 
子节点:        树结构中 除根节点外 其他节点都称作子节点 
叶子节点:    特殊的子节点, 没有后继的 子节点 

树的度:        以树中 直接后继最多的节点 个数 称该树的 度 
树的深度:    从根开始 到每一个叶子节点 最长的经过的节点 个数       即树的层数

树的路径:    从根节点开始  到目标节点 经过的节点顺序  

子树:            一颗树 中的 一部分节点 构成的一颗 树  称该树是 其子树 
   

   2、二叉树 

(1)二叉树的定义

        二叉树是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。
二叉树与普通有序树不同,二叉树严格区分左孩子和右孩子,即使只有一个子节点也要区分左右。

          简单来说就是:a. 二叉树 有0个或1个或2个 直接后继节点  且 严格区分左右 
                                    b.一个二叉树 其 子树 也一定是二叉树 
    

(2)二叉树的一些特性: 


  1.在二叉树的第i层上至多有2的i-1次方个结点  2^(i-1)
  2.深度为k的二叉树至多有2的k次方-1个结点    2^k -1
  3.对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点n2,那么n0=n2+1
        叶子节点的 个数  始终比 度为2的节点个数多 1个
  4.具有n个结点的完全二叉树的深度为 = (log2n)+1  取整数 
        第n号节点  是  (log2n)+1  取整  行
  5.对一棵有n个结点的完全二叉树的结点按层序编号(从第一层到最后一层,每层从左至右),
    对任一结点i(1<i<n)有:
     a.如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点i/2 取整;
     b.如果2i>n,则结点i无左孩子(即为叶子结点);否则其左孩子结点是2i;(偶数个结点,最后一个叶子结点一定是左)
     c.如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1;(奇数个结点,最后一个叶子结点一定是右)

(3)二叉树的特例


a.满二叉树:  除叶子节点外 其他有所节点 都有两个 直接后继  且 叶子节点都在最后一层
 
b.完全二叉树: 只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。

    除最底层 没有排满外  其他层 均 排满  且 每一层都需要按照先左后右的顺序排列 

c.带权二叉树:二叉树的 路径上 带有 权值 


(4)二叉树的遍历:


        a层次遍历
        b深度遍历
            先序遍历:     先根  后左右
            中序遍历:    先左   后根右
            后序遍历·:    先左  后右根
        先序遍历或后序遍历可以确定根节点    

         先序遍历第一个就是根节点

        后序遍历最后一个为根节点
        中序遍历   可以确定左右子树

              

六、常见的数据结构——图


    1、定义

        图是一种比表更复杂的数据结构 ,图有多个直接前驱, 多个直接后驱。

                树是   特殊的图

    顶点:图    存储数据的节点
    边/弧:顶点与顶点之间的关系 
        没有方向称边    有方向的称弧
    边/弧的权值:一个顶点到另一个顶点的代价
    子图:由图中的一部分节点及这些节点的边构成
    路径:从一个顶点到另一个顶点经过的边
    简单路径:路径中经过的顶点没有重复
    
    一个连通图    有n个节点    有n(n-1)/2个边      有n(n-1)个弧


    2、图的存储


        顺序存储:   节点:数组     边:邻接矩阵
            对稠密图  或   节点较少的图
            消耗内存较多
        离散存储:邻接链表   十字链表

目录

一、数据结构与算法的概念

    1、数据结构

    2、算法

二、常见的数据结构———表

      存储结构

对表的一些操作:

链表与顺序表的优劣:

三、常见的数据结构——队列

四、常见的数据结构——栈

4种类型的栈:

    五、常见的数据结构——树    

  1、树的定义

   2、二叉树 

(1)二叉树的定义

(2)二叉树的一些特性: 

(3)二叉树的特例

(4)二叉树的遍历:

六、常见的数据结构——图

    1、定义

    2、图的存储


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值