什么是数据结构
数据结构就是在计算机中,存储和组织数据的方式。
编程服务于现实,所以用现实举个例子。你有一个空的图书馆,还有一大堆书籍,你必须要将所有的书籍存放到图书馆,并且还能快速的找到书籍。如何做?
我们是不是要按照合理的方式来存放这些书籍,比如书籍编号的升序或降序,以及书籍的类型。
图书馆好比计算机的内存空间,书籍就是一堆数据,如何正确的摆放这些数据,还有如何增加,删除这些数据,就是数据结构考虑的问题了。
常见的数据结构
数组、串
栈、队列
链表
集合
堆
字典、散列表
树
图
每一种数据结构都有它的应用场景,不同的数据结构的不同操作性能是不一样的。
有的查询性能很快,有的插入速度快,有的插入头部和尾部快,有的做范围查找快,有允许元素重复,有的不允许重复,这些要根据实际开发去选择。
最后数据结构和算法,与编程语言无关。
什么是算法
算法就是解决问题的办法或逻辑。
举个例子,输入n,计算得出1+2+3+……+n=?
小明是这样思考的,一个一个算,其实就是一个for循环。
functionadd(n){letsum=0;for(leti=1;i=n;++i){sum+=i;}returnsum}console.log(add())
小红是这样想的,1+(n-1),2+(n-2),3+(n-3),如此类推下去,这里要特别说下,有两种情况,如果n为偶数,那么公式就是这样n*(n/2)+(n/2),如果n是奇数,那么公式是n*(((n-1)/2)+1)
functionadd(n){letsum=0;if(n%2===0){sum=n*(n/2)+(n/2);}else{sum=n*(((n-1)/2)+1);}returnsum}console.log(add())
从算法复杂度来看,小明是O(n),而小红是O(1),显然小红的算法更优秀。
什么是算法复杂度,后续会专门说到,这里主要解释下何为算法。
所以有时候不要什么都依赖计算机计算,我们要为计算机考虑一下,前者很简单想出来,后者有那么一丁点难度。
预览时标签不可点收录于话题#个上一篇下一篇