大家好,我是朱光翼,今天是JS学习的第三天,我在北京珠峰学习的第三天(打个广告,大家见谅)。今天我们学习了很多数据类型,以及他们在JS底层运行的方式。
不知道有没有朋友和我一样,多年中一直觉得数据类型就是数据结构。(大家不要笑,我真的是这么以为的)。但其实不是的,JS中有很多数据类型:类似与Number/boolean/null/undefinal/String/symbol/等等,这些类型是如何产生的,这个问题我还没有去研究,但是我发现了数据结构这个东西,并且并不难,所以今天和大家分享一下,希望对大家的学习有所帮助。
什么是数据结构那?
程序的目的主要是用一些逻辑语句去控制一些数据,然后达到某种目的,比方说经典的排序问题,就是不停的“搬运”数据。数据的摆放方式,决定了搬运的效率,好的数据摆放,更容易让逻辑语句达到目的。那么数据结构代表了数据是如何摆放的,如何相互关联的,如何去取用存放的。逻辑语句根据不同的数据结构特点,进行最合理的操作,来达到目的,实现程序功能。
那么数据结构总共分为几类那?
在我阅读的书籍中,一共给数据分为四种结构,我相信后来的科技发展会有其他的数据结构类型,各位朋友可以在留言板中补充,谢谢。
注:这里还是要提醒大家,所写内容比较浅显,且并不权威,只讨论原理,并不能作为应用标准
1、栈(Stack):本意是干草堆,有点像我们会把一些东西堆在一起,比方说把衣服堆高,它的特点就是,如果我去拿衣服,最好是从上往下一件一件拿。 这与我们放衣服的顺序是相反的,在书中有一个缩写叫做FILO(first in last out)先进后出,所以这个栈是一个线性的,不是那么灵活。
2、队列(Queue):像是在排队,与栈不同的是队列是先进后出,即FIFO(first in first out),同样是线性的存储关系,那有什么不同那?在栈内存中,我们拿出一个东西和放入一个东西,只和我们最后操作的内容有关系,栈其余的内容都没有受到影响。但是队列不一样,由于先进后出的关系,我们队列最前面的人出去以后,队列后面的人会跟上,这样原来的第二位,变成了第一位,也就是说后面的地址前移了。
3、链表,链表本身也是一个线性的关系,但链表与前两者的不同是,在链表中的每个元素,末尾都有一个地址,如果这个地址直接指向下一个元素,那么这与栈和队列就没有什么区别了,但是如果我们操作这个地址来改变它,我们可以让地址链接任何一个元素,这就变得很灵活,在程序中我们程序员通常会开辟一个空间,这个空间要做指定的事情,为了灵活我们会选用链表形式的数据结构。
4、二叉树:二叉树与链表比较相似,不同的是二叉树的每一个元素结尾有两个地址,也就是可以指向两个元素,这样做有什么好处那?应该来说,我们在搜索的时候效率更高,在某一个分叉上寻找内容,而不需要遍历所有的数据。
以上就是数据结构中我所查询到的内容,都是计算机底层的存储机制,希望对你有帮助。
这里有一个小小的收获,在JS的学习中,我们老师讲解到JS中栈内存负责存储变量名、基本数据类型,完成JS代码的运行。当遇到数组、函数、对象时会用堆来存储。我们会看到上面没有堆这种数据结构,于是通过上网查询,我找到堆的相关信息,发现里面也大有文章,我这里不做赘述,大家可以点击这个链接观看堆和栈的解释和区别。