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


    1.什么是数据结构

    一般来说,用计算机解决一个具体问题时候,首先要具体问题抽象出一个适当的数学模型,然后设计算法,编程序,进行调试,直到得到最终的答案。现在高级编程语言会将一些底层需要的数据结构进行封装,比如java的hashmap,以前的1.7版本,采用了数组和链表的组合方式,为了更加的追求效率,采用了红黑树的方式,这里面也是数据结构的运用,导致了效率的增强。再比如redis里面的常见的几种数据类型,底层实现还是通过数据结构的完成,所以了解数据结构是非常重要的一环。

    2.专业术语:

    数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。

    数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

    数据项:有独立含义的数据最小单位,也称域。

    数据类型:是一个值的集合和定义在此集合上一组操作的总称。

    抽象数据类型:ADT,指一个数学模型以及定义在该模型上的一组操作。通常用数据对象、数据关系、基本操作集这样的三元组来表示。有数据抽象和数据封装两个重要特性。

    数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。包括(逻辑结构、存储结构和数据的运算)。

    数据的逻辑结构:指数据元素之间的逻辑关系。包括集合、线性结构、树形结构、图状结构或网状结构。

    数据的存储结构:指数据结构在计算机中的表示,也成物理结构。主要有顺序存储、连接存储、索引存储、散列存储。

    算法:对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。有5个重要特性(有穷性、确定性、可行性、输入、输出)

    算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求。

    时间复杂度:一般情况下,算法中基本操作的重复次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n)),表示随着问题规模n的增大,算法执行时间增长率和f(n)的增长率相同,称为时间复杂度。

    空间复杂度:S(n)定义为该算法所耗费的存储空间,是问题规模n的函数。

    数据结构的两个层次

    逻辑结构
    数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。

    存储结构(物理结构):
    数据元素及其关系在计算机存储器中的存储方式。

    3.逻辑结构

    逻辑结构

    集合——数据元素间除“同属于一个集合”外,无其它关系

    线性结构——一个对一个,如线性表、栈、队列
    树形结构——一个对多个,如树
    图形结构——多个对多个,如图

    4.存储结构

    顺序存储结构——借助元素在存储器中的相对位置来表示
    数据元素间的逻辑关系
    链式存储结构——借助指示元素存储地址的指针表示数据
    元素间的逻辑关系

    数据类型
    定义:在一种程序设计语言中,变量所具有的数据种类 

    C语言:
     基本数据类型: char int float double void
    抽象数据类型
    更高层次的数据抽象

    由用户定义,用以表示应用问题的数据模型

    由基本的数据类型组成, 并包括一组相关的操作
    抽象数据类型

    抽象数据类型可以用以下的三元组来表示:

    ADT = (D,S,P)
    
    数据对象   D上的关系集    D上的操作集
                    
    
    ADT抽象数据类型名{ 
            数据对象:<数据对象的定义>
            数据关系:<数据关系的定义> 
            基本操作 :<基本操作的定义> 
        } ADT抽象数据类型名
     
    

    算法:

    算法的特性:
    输入:有0个或多个输入
    输出:有一个或多个输出(处理结果)
    确定性:每步定义都是确切、无歧义的
    有穷性:算法应在执行有穷步后结束
    可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行

    算法分析:时间复杂度

    算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:
    T(n)=O(f(n))

    表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐近时间复杂度。

    分析算法时间复杂度的基本方法:
    找出语句频度最大的那条语句作为基本语句
    计算基本语句的频度得到问题规模n的某个函数f(n)
    取其数量级用符号“O”表示
    时间复杂度是由嵌套最深层语句的频度决定的

    5.总结

    好多概念还是需要自己看书理解,书面语抽象,虽然我大二学的数据结构,我还是觉得严蔚敏的数据结构对入门数据结构不够友好,不过有好多优秀的博客可以参考。

  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/tojian/p/9855792.html
Copyright © 2011-2022 走看看