邂逅数据结构和算法

  可能你之前经常在很多地方看到有人讨论数据结构与算法,但对于他到底是一个什么样的东西,一直是云里雾里的,特别是对于那些从其他行业转到编程领域的人来说,数据结构和算法他的概念就会更加模糊了,

  那么数据结构和算法到底指定是什么东西呢,我们到底有没有必要学习数据结构和算法呢?因为似乎我们学习编程过程中,似乎没有必要了解这些,我们只是在学习一门语言的 基本语法/高级语法。然后通过他的一些语法去做出来一些界面效果,特别是对于前端来说,我们只需要学习它的语法然后去结合一些框架和库就可以达到这个目的,当然它其中可能包括一些复杂的逻辑结构,我们只需要把我们是思维转化为代码,来实现复杂的逻辑结构就可以了,那数据结构和算法是什么? I don't care,我不关心,我只需要完成上面给我的任务,而且我完成的非常好,那不就可以了吗?数据结构和算法什么的我并不需要,确实如果我们只是想了解语言的应用层面,那么数据结构和算法显得没那么重要但是如果我们希望了解语言的设计层面,那么数据结构和算法就很重要了

1,什么是数据结构

  数据结构其实没有官方的定义,那我们就看几种比较权威的民间定义

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

数据结构是ADT(抽象数据类型 Abstract Data Type)的物理实现
---《数据结构与算法分析》

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

  我们这里需要注意一点,所有关于数据结构的定义都会和一个词联系起来算法,这是因为所有数据结构的定义和实现都离不开算法,后面的文章我们还会详细介绍算法,它和数据结构同样重要

  下面我们从自己的角度来认识数据结构吧,其实数据结构就是在计算机中储存和组织数据的方式,我们知道,计算机中数据量非常庞大,那如何以高效的方式组织和存储呢?

  这就好比一个庞大的图书馆中存放了大量的书籍,我们不仅仅要把书放进入,还应该在需要的时候能够轻松的取出来,所以我们就应该以合理的方式来组织这些图书(数据)才能达到一个比较好的效果,下面我们就以图书馆这个例子展开说明

我们应该怎样摆放图书呢,这个应该是跟数据量有关的

  • 比如说我们的书籍相对较少


    书架
  • 那假如你有一家书店,书籍数量相对较多,


    书屋
  • 假如你有一家图书馆,书籍量相当庞大


    国家图书馆

最终图书摆放要使得两个相关操作方便实现

  1. 新书怎么插入?
  2. 怎么找到某本指定的图书?

以下列举出几种方式
方法1:随便放

  • 插入:哪里有空放哪里,一步到位!
  • 查找:找某本书,累死.....

方法2:按照书名和拼音字母顺序排放

  • 插入:新进一本《阿Q正传》,按照字母排序放到相应位置
  • 查找:首先找到首字母区域,然后这个较小的区域中查找(二分查找法)

方法3:将书架划分为几块区域按照类别存放,类别中按照字母排序

  • 插入:先定类别然后按照字母排序放到相应位置
  • 查找:先定类别,再二分查找

结论:当你准备去解决一个问题,解决问题的效率是和数据的组织方式有关,数据结构直接影响到你解决问题的效率,一个好的数据组织方式是你解决问题的关键

下面我们先看下编程中常见的集中数据结构


常见的数据结构

  常见的数据结构较多,每一种都有其对应的应用场景,不同的数据结构的不同操作性能是不同的,有的查询性能很快,有的插入速度很快,有的是插入头和尾速度很快,有的做范围查找很快,有的允许元素重复,有的不允许重复等等,在开发中要根据具体的需求来选择

PS:数据结构和算法是和编程语言无关的,而常见的编程语言都有直接或间接的使用我们上述所说的数据结构,比如javascript中的Array,Set,Map,Object等等。之前我们一直是以API使用者的身份去使用他们,如果我们更加想要了解它们的底层,数据结构和算法的学习是不可或缺的,个人非常喜欢的一句话,了解真相你才能获得真正你的自由,了解底层实现后,你在用这些东西的时候你才能更加自由,更加的得心应手和灵活,死记规则你只能漂于表面

2,什么是算法

  算法(Algorithm),在之前的学习中,我们可能已经学习过几种排序算法,并且知道不同的算法执行效率是不一样的,也就是说解决问题的过程中,不仅仅数据的存储方式会影响效率,算法的优劣也会影响着效率,那么到底什么是算法呢?

   数据结构是组织和存储数据的一种方式,而算法就是解决问题的办法,解决问题的步骤,解决问题的逻辑,解决问题我们采用的一步一步的操作

算法的定义:

  1. 一个有限指令集,每条指令的描述不依赖于语言
  2. 接受一些输入(有些情况下不需要输入,视情况而定)
  3. 产生输出
  4. 一定在有限步骤之后终止(不应该是一个死循环)

算法通俗理解:Algorithm这个单词本意就是解决问题的办法/步骤逻辑,数据结构的实现,离不开算法

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

步骤

这就是解决电灯不工作的算法(步骤)

结论:我们如果想要解决某个问题一定是按照某个步骤,一步一步去完成的,而这些步骤综合起来就是我们解决这个问题它算法

·

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容