一篇关于与javascript数据结构的邂逅——01

没那么多废话,上来直接操作,省的日后看见博客还得读一大段心得。我将从最简单的数组谈起,然后再是堆栈、队列;单项链表双向链表,然后是集合;,树的介绍以及重点谈及二叉搜索树,并实现相应的代码,并聊聊红黑树实现的理念;最后我将实习几种排序算法,从最简单的冒泡排序、选择排序、插入排序到更难得哈希算法以及快速排序。其实应该还少了一个图,但是我人懒,没看,等看了在更新吧!
先说说数组,我在学习JS的时候我就学习了有关数组的众多方法,但是并不是很难。从pop,push,splice(slice感觉这个不会也没关系),join,toString,concat,shift,unshift,说这几个方法的目的是为了后边的使用,其实在链表或者二叉树当中都有数组的方法影子。除此之外在介绍三个我认为比较常用的三个高级数组方法map,reduce以及filter。先说说他们的作用吧,首先是他们都会接受一个handler处理函数,其中filter实现的是过滤,给定一个判断返回数组内容中为真的那部分,并返回新的数组;然后是map,它是对数组内容的每一个进行操作,返回的数组长度不变;最后是reduce,他用于实现数组的求和,最终返回一个值。嗯,可能你看的有点迷糊,但是不好意思啊,刚开始写,我只是写给我自己看的,当中要补充的知识,您自己百度吧!!!
然后开始说堆栈,前面之所以说那么多,严格来说也并不是数据结构当中的内容,知识我突然想起了。后面主要是以代码的实现,而我的代码主要以实现增删改为主,会对函数进行封装,而我封装的函数是跟着别人写,然后再自己写(其实代码都差不多,哈哈,当然这也是为了以后看见提醒自己罢了!)
怎么说呢,堆栈和队列都很相像,只是在某一个实现的过程比较简单,对了,我这里的堆栈和队列都是基于数组实现的,你也可以使用链表。先上代码把,重点说后边滴。
首先封装一个栈/队列函数
在这里插入图片描述
然后在这里面封装对应的方法,这里封装方法的时候最好使用prototype
入栈方法
在这里插入图片描述
出栈方法
在这里插入图片描述
删除方法
一篇关于与javascript数据结构的邂逅——01_第1张图片
转换字符串
一篇关于与javascript数据结构的邂逅——01_第2张图片
在学习栈的时候,我也练习了一个十进制转为二进制的方法,它的思路是

  1. 首先你需要一个数组用于存放每次得到的数据,一个字符变量用于最后导出
  2. 判断十进制数是否大于0
  3. 如果大于,首先将number对2取余的值放入数组
  4. 将number对2相除取整
  5. 最后通过一个数组的join方法进行连接,我这里本来是可以用pop方法的,只是当时忘了,使用了for循环

一篇关于与javascript数据结构的邂逅——01_第3张图片
队列的方法和上边差不多了,只是个中的方法稍微有点不同,相信你是会的。不过在队列的实现过程中,我也做了一个练习,一个叫做击鼓传花的游戏,只是有点不同的是,我是数数字,当数到某一个数字的时候,那个人就出局。下边是代码的实现
思路是这样的

  • 首先我封装了一个函数,用于实现传入不同的值,来实现谁是赢家
  • 首先我是随机生成了10个数字,放到一个数组当中,每个数字代表不一样的选手
  • 创建队列,队列里面有各种方法
  • for循环,将选手放入队列中
  • 判断,当队列中还有超过一个人的时候
  • for循环,将前面num-1个被删除的人插入到队列的末尾

一篇关于与javascript数据结构的邂逅——01_第4张图片
*队列的优先队列
顾名思义,我们在添加队列的时候是有优先级的,它的添加顺序是,先让该数据的优先级同已在队列中的所有数据的优先级进行比较,然后通过优先级得出数据正确的位置。
队列的优先级在添加数据的时候,我们经常会内置一个类,在函数中在封装一个方法,形式如下:
一篇关于与javascript数据结构的邂逅——01_第5张图片
这样,每次在创建数据的过程,就会包含两个属性,一个是数据,另一个是优先级
当然,我为了实现优先队列还是需要一个属性
在这里插入图片描述
下面直接上 添加的代码
一篇关于与javascript数据结构的邂逅——01_第6张图片
这段代码需要注意三点

  1. 在函数内部在封装函数
  2. 在比较的过程当中如果所插入的优先级大于前面所插入的,那么就会造成bug
  3. 定义一个临时变量用于判断当存在已有的值的优先级大于插入的优先级是则不进行下一步,如果不存在,则直接在数组的末尾进行插入操作
    先写到这里,后边继续,如果一次性写完会产生阅读的厌倦!!!

你可能感兴趣的:(一篇关于与javascript数据结构的邂逅——01)