zoukankan      html  css  js  c++  java
  • 数据结构导论1

     

     数据结构(Data structure)

    是计算机组织数据和存储数据的方式;

    是指一组相互之间存在一种或多种特定关系的数据的组织方式和他们在计算机里面存储的方式以及定义在该组数据上的一组操作。

    计算机解决问题的步骤

    1. 数据的逻辑结构

    是指数据及其数据的组织方式。

    2.数据结构、算法和程序的关系

    算法+数据结构 = 程序

    (1976年瑞士计算机科学家尼克劳斯·维尔特[Niklaus Wirth]提出)

    1.简单来说,数据结构是计算机组织数据和存储数据的方式。

    2.1976年瑞士计算机科学家Niklaus Wirth曾提出一个著名公式 程序 = 算法+数据结构  

    基本概念和术语

    数据(Data):所有能被计算机处理的符号的集合。

    数据元素(Data Element):是数据这个集合中的一个个体即数据的基本单位。

    数据项(Data Item):数据元素常常还可以分为若干的数据项,数据项是数据具有意义的最小单位。

    数据,数据元素,数据项构成了数据组织的3个层次。

    数据库中,数据项又称为字段/域。

    它是数据得不可分割得最小标识单位。

    实际问题中的数据称为原始数据。

    逻辑结构

    指数据元素之间的结构关系。

    物理结构/存储结构

    指数据结构在机内的表示

    物理结构/存储结构

    物理结构(Physical Structure)/存储结构 指数据结构在机内的表示,数据的逻辑结构在计算机中的实现。

    数据的逻辑结构(D, {R}) 可分为下列几种:  D = {d1,d2, …, dn} 。

    集合: 数据元素同“属于一个集合”。R = { }。 线性结构: R= {(d1, d2), (d2, d3), …, (dn-1, dn)},即除起始节点和终端结点d1、dn外,每个节点有一个前驱和一个后继。 树状结构: (D, {R}) 构成树,即每个元素最多有一个前驱,可以有多个后继。 图状结构: (D, {R})构成一个图。

    逻辑结构的种类

    集合:任意两个结点之间都没有邻接关系,组织形式松散。

    线性结构:结点按逻辑关系依次排列形成一条“链”,结点之间一个一个依次相邻接。

    树形结构:具有分支、层次特性,上层的结点可以和下层多个结点相邻接,但下层结点只能和上层的一个结点相邻接

    图结构:最复杂,任何两个结点都可以相邻接。

    数据的存储结构:数据在计算机内的表示形式;

    存储结构的主要部分:

    存储节点(每个存储结点存储一个数据元素)

    数据元素之间关联方式的表示。

    数据结构的存储  = 数据元素的存储  + 元素逻辑关系的存储

    顺序存储方式:借助数据元素的相对存储位置来表示数据的逻辑结构;

    线性表的顺序存储方法:将表中的结点一次存放在计算机内存中一组连续的存储单元中。

    顺序的方法: 将元素存储到一片连续的存储区。

    链式结构

    链式存储方式:借助数据元素地址的指针表示数据的逻辑结构;

    这种结构是给结点附加一个指针字段,指出其后继节点的位置, 即存放结点的存储单元分为两部分:

    特点: 动态分配,不需要预先确定内存分配; 插入和删除不需要移动其他元素; 非随机存取结构。

    索引存储方式:借助索引表中的索引指示各存储节点的存储位置。

    散列存储方式:用散列函数指示各节点的存储位置。

    运算:指在某种逻辑结构上施加的操作,即对逻辑结构的加工。

    加工性运算:其操作改变原逻辑结构的值,如:结点个数,结点内容等。

    引用型运算:其操作不改变原逻辑结构的值。

    基本运算:

    建立,查找,读取,插入,删除

    数据的逻辑结构通常包括集合、线性结构、___树形结构_______和图状结构。

    链式存储的特点是利用指针来表示数据元素之间的__逻辑_______关系。

    数据的基本单位   数据元素。

    从宏观上看、数据、数据元素和  数据项  反映了数据组织的三个层次。

    数据的存储结构又称为物理结构,可以分为顺序结构、链式结构  索引存储  以及散列存储 等几种方式。

    一般来说,在每个逻辑结构上都定义了一组基本运算,通常这些运算包括:建立查找、读取、插入和删除等。

    算法的设计应满足:

    正确性:对于合法的输入产生符合要求的输出。

    易读性:算法应该易读、便于交流,这也是保证算法正确性的前提。添加注释也是提高程序的可读性一种办法。

    健壮性:当输入非法数据时, 算法还能做出适当的反应而不会崩溃, 如输出错误信息;算法中应该考虑适当的错误处理。

    时空性:指算法的时间复杂度和空间复杂度,算法分析主要分析算法的时间复杂度和空间复杂度,目的是提高算法的效率。

    选择最优算法的2个度量:

    时间复杂度:算法运行时需要的总步数,通常是问题规模的函数。

    空间复杂度:算法执行时所占用的存储空间,通常是问题规模的函数。

    合理地选择一种或几种操作作为“标准操作”,

    无特殊说明,默认以赋值语句作为标准操作。

    确定每个算法共执行多少次标准操作,并将此次数规定为该算法的计算量。

    确定算法的计算量:

    算法的最坏情况时间复杂度:以算法在所有输入下的计算量的最大值作为算法的计算量。 算法的平均情况时间复杂度:以算法在所有输入下的计算量的加权平均值作为算法的计算量。 最坏情况时间复杂度和平均情况时间复杂度统称为时间复杂度。

  • 相关阅读:
    Flink 作为现代数据仓库的统一引擎:Hive 集成生产就绪!
    终于要跟大家见面了,Flink 面试指南
    了解jQuery的$符号
    关于serialVersionUID的说明
    Java类更改常量后编译不生效
    ora-00054资源正忙,但指定以nowait方式
    【Servlet】基于Jsp的微信Oauth2认证
    [Maven]Maven构建可执行的jar包(包含依赖jar包)
    FTP服务FileZilla Server上传提示550 Permission denied
    nginx
  • 原文地址:https://www.cnblogs.com/jacksonxiao/p/11723582.html
Copyright © 2011-2022 走看看