数据结构总结

本文概述了数据结构中的基本概念,如线性结构(如表、队列和栈)、非线性结构(树和图),并介绍了算法的特性,重点讨论了时间复杂度和空间复杂度。此外,文章还详细讲解了链表、树(包括二叉树)和图的存储与遍历,以及图的使用实例,如最短路径算法。
摘要由CSDN通过智能技术生成

数据结构与算法:
    数据结构:描述从现实中抽象出数据模型 (数据抽象)

        逻辑结构:数据之间的逻辑关系

        线性结构:    表,队列,栈: 数据之间是线性关系  且 一 一对应

        非线性结构:    树:一对多
                               图:多对多
        存储结构:对数据以及数据关系的一种存储结构
            连续存储:将所有的数据放到一起  (例如:数组)
            离散存储:数据可能分布在内存的不同位置
    算法(对数据的操作):对完成某个动作所需的操作流程或步骤(是多逻辑进行操作,而不是简单的数值操作)
        增:增加数据
        删:删除数据
        改:修改数据
        查:查找或遍历数据
算法特性:

        1.可行性(可以实现,每个步骤能够在有限时间内完成)

        2确定性(没有歧义,步骤唯一且确定)

        3.有穷性(步骤是有限的)

        4.有一个或多个输入和输出

求1+..+n的和的方法
        1.for循环
        2.等差数列求和
算法优劣评判标准:
    时间复杂度(T):语句执行的频度   与算法程序执行的时间 没有必然关系
    执行的频度:算法中 语句执行的次数   与  输入问题规模的比值
        度量一个算法的时间复杂度 通常使用其量级(O表示)
常见的时间复杂度的量级:
    最好的
        O(1) 常量级  算法语句执行次数 与 输入问题规模 无关
    较好
        O(log n)   对数级
        O(n)       线性级
    一般
        O(n*log n)
    较差
        O(n^2)    平方级

    差      O(2^n)   次方级     

                O(n!)   阶乘级
空间复杂度:占用内存的多少
    
例如求杨辉三角:第i行 j 列的值(从0开始)
    可用:A(i,j)=i!/(j!*(i-j)!)

常见数据结构:
1.表结构:数据逻辑组织为表形式,逻辑上,数据是连续排列的,每个节点(出头尾外),都有且仅有一个前驱和一个后继;
    头节点   只有后继,没有前驱;尾结点   只有前驱,没有后继;   
    节点:数据逻辑的最小单元
    例如:C语言中的数组
    存储结构:
        顺序存储:数组存储
            顺序表:存储上连续存储.逻辑上是表结构
        离散存储:链式存储
        链表:存储上离散存储,逻辑上是表结构    
    顺序表的操作:
        创建表-销毁表-增删改(修改节点值,排序)查(遍历)


链表:表的离散存储
    逻辑结构(表结构)  通过指针方式实现逻辑上的链接

链表中的一些情况的表示:
    链表尾部节点的表示:    指针域==NULL
    空链表 表示:                 使用一个不存储数据的节点 作为头结点,当头节点的指针域为空时表示空链表.


链表与顺序表的 优劣:
    链表根据节点长度动态分配,没有   长度限制
    链表的    插入和删除    节点,时间复杂度比顺序表优秀,不会存在大片数据整体移动的情况

    顺序表的存储密度高 不会有指针域  (空间翻倍)
    顺序表的随机访问效率高

链表的应用:
    约瑟夫环问题

遍历链表   while(p->next!=NULL)p=p->next;

    
静态链表:链表的节点 事先以及开辟(节点数组),动态下标或指针域 来 建立逻辑关系
           缺点:长度事先固定

队列:是一种特殊的线性表   (先进先出),规定了 表的入口和出口  (多用于缓冲)

队列的实现:
    顺序存储的队列:  循环队列
    离散存储的队列:  链式队列

离散方法的链式队列:双向循环链表循环队列

栈:特殊的线性表,只能在表的一端 进行插入和删除
    
    顺序栈:例如:数组    从数组尾部进行插入和删除

    链式栈:例如:链表    从头部插入和删除

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


树:一个节点 有0个或多个直接后继 节点,有一个(子节点)或 0个(根节点) 直接前驱
典型树结构:目录结构

根节点:    树的起始位置

子节点:除根节点以外的其他节点都称为子节点

叶子点:特殊的子节点,没有后继

树的度:以树中直接后继最多的节点个数称为该数的度

树的深度:从根开始,到每一个叶子结点,经过的最长的节点个数,即树的深度

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

子树:一颗树中的一部分节点构成的一棵树,称为该该树的子树

二叉树:度为2的数
    1.二叉树 有(0,1,2)个直接后继节点  且严格区分左右
    2.二叉树的子树也一定是二叉树

特殊的二叉树:
1.满二叉树:    每一层的每个节点 都有两个直接后继 且叶子节点都位于最后一层
2.完全二叉树:    最后一层从左到右依次排序,且没有排满

二叉树的存储:

        顺序存储:将二叉树补全为完全二叉树,按从左到右,从上到下,依次进行编号,这个标号即为数组的下标.

二叉树的遍历:

        深度遍历:先序遍历(左-根-右),中序遍历(根-左-右),后续遍历(左-右-根)

        层次遍历

        广度遍历

图:    网结构,是一种比表更复杂的数据结构,有多个直接前驱 和多个 直接后继
顶点: 图中 存储数据的节点
边/弧: 顶点与顶点间的关系   没有方向称边  有方向称弧

边/弧的权值: 从一个顶点到另一个顶点的代价

子图:   图中的一部分节点以及这些节点的边 

路径:从一个顶点到另一个顶点所经过的边

简单路径:路径中所经过的顶点没有重复的


图的存储:
    顺序存储:节点(数组)  边(邻接矩阵)
    缺点:内存消耗较多
    离散存储:邻接链表
稠密图: 边较多
稀疏图: 边较少
完全图: 边=n(n-1)

图-解决实际问题:
    寻路算法:最短路径

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值