暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

鲸技术:谈谈数据结构与算法之线性数据结构

中航鲸技术 2019-10-16
274


 自1946年第一台计算机问世以来,计算机产业的发展远远超出了人们对他的预期,深入人类社会的各个领域,随之而来计算机加工处理的对象由纯粹的数值发展到字符,表格,图像等各种具有一定结构的数据,随之也产生了各种各样的数据结构和对应的各种算法,给各行各业的业务场景提供相应的解决方案


01

数据结构和算法的关系


数据结构和算法的关系就类似食材和菜谱的关系,脱离数据结构谈算法是没有意义的,同样脱离了食材谈菜谱也是没有意义的,比如说没有肉丝这种食材,哪里还有类似青椒肉丝,鱼香肉丝这类菜谱呢,比如说没有数组这种数据结构,哪里还有冒泡排序,插入排序等算法呢。这是因为数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。



02

了解数据结构和算法的意义


我们学任何知识都是为了“用”,是为了解决实际工作问题的,学习数据结构和算法自然也不例外。作为业务解决方案,我们会用到各种框架、中间件和底层系统,比如 Spring、RPC 框架、消息中间件、Redis 等。在这些基础框架中,一般都糅合了很多基础数据结构和算法的设计思想。掌握数据结构和算法,不管是对于阅读框架源码,还是理解其背后的设计思想,都是有帮助的。看待问题的深度,解决问题的角度就会不一样。



03

数据结构的分类及其应用场景


数据结构一般分为两大类,线性数据结构和非线性数据结构,就像我们所说的食物分为素食和荤食一样,今天我们就先来谈一谈线性数据结构吧,线性数据结构一般分为顺序表,链表,队列,栈,他们的特点就是数据元素之间存在一对一线性关系。
假设每个数据元素是一个数据方块,数组就像是一个盒子,数据元素是一个个按编号顺序放在盒子小格子里的,存和取通过编号都很方便。缺点是需要一个完整的盒子来存放,反映到内存中就是需要一个盒子的完整区域。链表的数据结构的话,各个数据元素是通过类似链条的东西来关联的。队列的话,类似是一个横向的管子,一个方向进数据,一个方向出数据,先进的先出,后进的后出。栈的话也像一个竖状的管子,跟队列不一样的地方在于栈只有上面的口子开着,进出数据都是这个口子。因此只能先进后出,后进先出。对于队列和栈来说有一个通俗的比喻方便大家理解,吃多了吐的是栈,吃多了拉的是队列,在鲸技术中我们也用到了以上的各种线性数据结构和算法来给各种业务场景提供解决方案。

大家不要觉得数据结构和算法听上去不太好理解,其实都来源于生活,举个队列的应用场景。大家在工作的时候,手头上一般情况下不会只有一个任务。手头有多个任务的情况下,通常都会把多个任务一个个排好。一般都是按时间顺序,先来的先做,后来的后做,而这个数据结构其实就是队列。而多个任务的优先级又不太可能都一样,任务都分轻重缓急的,重要的任务放在前面,次重要次之。其实这就是一个优先队列了,而这个优先队列的做法,其实就是队列的一种算法。

再比如说的应用场景,大家应该都有浏览网页的经历,比如我们访问网页进行多次的页面跳转,再想回到前几页或后几页的时候,只需要点击浏览器的前进或者后退按钮就可以了。浏览器是如何记住你的操作的呢,其实实现这个功能就运用了这样一种数据结构,前面讲到栈这种数据结构具有先进后出和后进先出的特性,通过栈存储你浏览网页的地址。就能实现浏览网页的前进和后退功能。


结语:


纵观技术发展,新的技术层出不穷,结构也越来越复杂,但是底层的数据结构都是一样的,有好的基础,对较快理解和掌握新技术是非常有帮助的,鲸技术们一直在路上不断的追求着。


- END -


文章转载自中航鲸技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论