zoukankan      html  css  js  c++  java
  • 【数据结构】绪论

    基本概念

    • 数据:
      数据是对客观事物的符号表示,在计算机科学中指所有能输入到计算机中并被计算机程序处理的符号的总称。数据的含义很广泛,如图像、声音等都可以通过编码而归之为数据的范畴。
    • 数据元素:(行)(元组)(记录)
      数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可包含多个数据项。数据项是数据的不可分割的最小单位。如把一本书看成一个数据元素,则可把书名、作者名,看成这个数据元素包含的两个数据项。
    • 数据对象:(表)
      数据对象是性质相同的数据元素的集合,是数据的一个子集。如整形数据对象是集合 N={0,+-1,+-2......}。
    • 数据类型:
      • 原子类型:其值不可再分的数据类型。如整形、字符型、枚举类型、空类型。
      • 结构类型:其值可以再分解为若干成分(分量)的数据类型。
      • 抽象数据类型:抽象数据组织及与之相关的操作。
    • 抽象数据类型:(Abstract Data Type)
      抽象数据类型(ADT)是指一个数学模型及定义在该模型上的一组操作,仅取决于它的一组逻辑特性。通常用(数据对象、数据关系、基本操作集)这样的三元组来表示抽象数据类型。
    • 数据结构:(数据结构=数据元素+数据关系)
      数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据元素不是孤立存在的,数据元素相互之间的关系称为结构。包括三个方面的内容:逻辑结构、存储结构和数据的运算。

    数据结构三要素

    数据的逻辑结构

    • 基本概念:
      逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。
    • 通常有4类基本结构: 

      • 集合:结构中的数据元素除了“同属于一个集合”的关系外,无其它关系。
      • 线性结构:结构中的数据元素存在一对一的关系。
        线性结构特点:a.存在惟一一个被称为“第一个”的数据元素。b.存在惟一一个被称为“最后一个”的数据元素。c.除第一个外,每个数据元素均只有一个前驱。d.除最后一个外,每个数据元素均只有一个后继。
      • 树形结构:结构中的数据元素存在一对多的关系。
      • 图形结构/网状结构:结构中的数据存在多对多的关系。
    • 也可分为两大类:
      • 线性结构:
        • 一般线性表
        • 受限线性表:
          • 栈和队列
        • 线性表推广:
          • 数组
          • 广义表
      • 非线性结构:
        • 集合
        • 树形结构:
          • 一般树
          • 二叉树
        • 图状结构:
          • 有向图
          • 无向图

    数据的存储结构

    • 基本概念:
      数据结构在计算机中的表示(映像)称为数据的物理结构/存储结构。任何一个算法的设计取决于选定的数据逻辑结构,而算法的实现依赖于采用的存储结构。
    • 主要分类:
      • 顺序存储:把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。
      • 链式存储:又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
      • 索引存储:分别存放数据元素和元素间关系的存储方式。

        类比:好比查字典,不可能一页一页翻,所以,字典都是有目录的,这个目录,就是索引了。

      • 散列存储:又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。

    数据的运算

    • 基本概念:
      施加在数据上的运算包括运算的定义和实现。
    • 运算的定义:
      运算的定义是针对逻辑结构的,指出运算的功能。
    • 运算的实现:
      运算的实现是针对存储结构的,指出运算的具体操作步骤。

    算法

    基本概念

    • 基本概念:
      算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
    • 重要特性:(必须)有缺课出入:有确可出入)
      • 有穷性:算法的执行步骤数量有穷,每一步的执行时间有穷。
      • 确定性:算法中每条指令含义要明确。算法只有惟一的一条执行路径,即相同的输入只能得到相同的输出。
      • 可行性:算法是能行的,即算法中描述的操作都可以通过已经实现的基本运算 执行有限次来实现。
      • 输入:0个或多个
      • 输出:1个或多个
    • “好”算法的目标:(非必须)(正确性、易读性、强壮性、高效性)
      • 正确性:算法应能够正确地解决求解问题。
      • 可读性:算法应具有良好的可读性,以帮助人们理解。
      • 健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
      • 效率:效率是指算法执行的时间。与问题规模有关。
      • 低存储:存储量需求是指算法执行过程中所需要的最大存储空间。与问题规模有关。

    算法效率的度量

    • 时间复杂度:
      算法的执行时间与原操作执行次数之和成正比。时间复杂度有小到大:O(1)、O(logn)、O(n)、O(nlogn)、O((n^2))、O((n^3))。幂次时间复杂度有小到大O((2^n))、O(n!)、O((n^n))
    • 空间复杂度:
      若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。
  • 相关阅读:
    在Ubuntu中通过update-alternatives切换软件版本
    SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
    mongodb 的使用
    利用grub从ubuntu找回windows启动项
    How to Repair GRUB2 When Ubuntu Won’t Boot
    Redis vs Mongo vs mysql
    java script 的工具
    python 的弹框
    how to use greendao in android studio
    python yield的终极解释
  • 原文地址:https://www.cnblogs.com/blknemo/p/11456164.html
Copyright © 2011-2022 走看看