1.什么是数据结构和算法

  什么是 数据结构和算法 呢?  

    可能是你之前经常在很多地方都看到有人讨论 数据结构和算法,但是它到底是什么一直云里雾里.

    因为似乎我们 学习编程 的过程中,没有必要 了解这些,我只是在学习一门语言的 基本语法/高级语法/做出界面效果/实现发杂的逻辑 就可以了.

    数据结构和算法? 它是什么? I don't care?

    如果我们知识想了解语言的 应用层面,那么数据结构和算法显得没有那么重要.

  举个例子:

    Java的线性结构列表,有ArrayList和LinkedList,如果选择呢?

    记住规则,你也可以很好的选择,但是如果你了解它们底层的数据结构就会非常清晰的知道如何选择.

    虽然,我们也许不重头到尾设计一门编程语言,但是了解这些同样重要.

  什么时候会想学习数据结构和算法?

    面试时被问到的时候.

    工作一两年之后.

  那么,到底什么是数据结构的算法呢?

    官方定义:并没有...

  我们分开来理解它们是什么?

    什么是数据结构?

      民间定义:

        "数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系.这些联系可以通过定义相关的函数来给出." ---<<数据结构 算法于应用>>

        "数据结构是ADT(抽象数据类型 ABstract Data Type)的物理实现." --- <<数据结构于算法分析>>

        "数据结构(data structure)是计算机中存储 组织数据的方式.通常情况下,精心选择的数据结构可以 带来最优效率的算法." ---中文维基百科

      我们还是从 自己的角度 来认识数据结构吧:

        数据结构就是 在计算机中,存储和组织数据的方式

        我们知道,计算机中数据量非常庞大,如何以高效的方式组织和存储呢?

        这就好比一个庞大的图书馆中存放了大量的书籍,我们不仅仅要把书放进入,还应该在核实的时候能够取出来

      我们从摆放图书说起  

      如何摆放图书?

        如果是自己的书相对较少,我们可以随意摆放摆放

        如果你有一家书店,书的数量相对较多,我们就需要摆放整齐

 

        如果我们开了一个图书馆,书的数量相当庞大,我们就需要分类摆放整齐

      图书摆放要是的两个 相关操作 方便实现:

        操作1:新书怎么插入?
        操作2:怎么找到某本指定的书?

      方法1:随便放

        操作1:哪里有空放哪里,一步到位!

        操作2:找某本书,累死...

      方法2:按照书名的拼音字符顺序排放

        操作1:新进一本<<阿Q正传>>,按照字母顺序找到位置,插入

        操作2:二分查找法

      方法3:把书架划分成几块区域,按照类别存放,类别中按照字母顺序

        操作1:先定级别,二分查找确定位置,移出空位

        操作2:先定级别,再二分查找 

   结论: 

      解决问题方法的效率,根数据的组织方式有关

      计算机中存储的数据量相当于图书馆的书籍来说数据量大,数据种类更多

      以什么样的方式,来储存和组织我们的数据才能再使用数据时更加方便呢?

      这就是数据结构需要考虑的问题

  数据结构:队列(Queue),树(Tree),堆(Heap),数组(Array),栈(Stack),链表(Linked List),图 (Graph),散列表(Hash)

      

 

  常见的数据结构较多:

    每一种都有其对应的应用场景,不同的数据结构不同操作性能是不同的.

    有的查询性能很快,有的插入速度很快,有的是插入头和尾速度很快

    有的做范围查找很快,有的允许元素重复,有的不允许重复等等

    在开发中如何选择,要根据具体的需求来选择

   注意:数据结构和语言无关,常见的编程语言都有直接或者间接的使用上述常见的数据结构

  为什么之前学习JavaScript没有接触过数据结构呢?好像只见过数组.

    单纯从 客户程序员 的角度,我们并不需要过多的了解它们的现实细节.

    但是简单的使用不能让我们更加灵活的使用它们.了解真相,你才能获得真正的自由.

  什么是算法?

    算法(Algorithm)的认识

      在之前的学习中,我们可能学习过集中排序算法.并且知道,不同的算法,执行效率是不一样的.

      也就是说解决问题的过程中,不仅仅数据的存储方式会影响效率,算法的优势也会影响哲效率

      那么到底什么是算法呢?

    算法的定义:

      一个有限指令集,每条指令的描述不依赖于语言

      接受一些输入(有些情况下不需要输入)

      产生输出

      一定在有限步骤之后终止

    算法通俗理解:

      Algorithm这个单词本意就是解决问题的方法/步骤逻辑

      数据结构的额实现,离不开算法.

    举例:电灯不工作的解决算法

      

 

 

 

 

    

    

posted @ 2022-03-23 19:40  风太温柔  阅读(214)  评论(0编辑  收藏  举报