zoukankan      html  css  js  c++  java
  • javascript 堆栈与列队

    javascript数组是一个逆天的存在,到了ecma262v5,它已经是堆栈,列队及迭代器的合体。有时候我们不需要这么强大的东西,这只要考虑到for循环太麻烦了,我们只需要非常简单的遍历,于是想用普通对象模拟一个就是。

    首先是堆栈,先进后出

                  function Stack(){   }
                  Stack.prototype = {
                      add: function(el, pt){
                          this._first =  pt = {//_first是不断变的
                              _next:this._first,
                              el: el
                          }
                          if (pt._next) {
                              pt._next._prev = pt;
                          }
                          return this;
                      }
                  }
                  var s = new Stack;
    
                  s.add("1").add("2").add("3")
                 
                  var pt = s._first;
                  while (pt) {
                      alert(pt.el)
                      pt = pt._next;
                  }
    

    接着是列队,先进先出:

    
                  function Queue(){   }
                  Queue.prototype = {
                      add: function(el){
                          if( this._last ){ 
                              this._last =  this._last._next = {//_last是不断变的
                                  el: el,
                                  _next: null//设置_last属性表示最后一个元素,并且让新增元素成为它的一个属性值
                              }
                          }else{
                              this._last = this._first = {//我们要设置一个_first属性表示第一个元素
                                  el: el,
                                  _next: null
                              }
                          }
                          return this;
                      }
                  }
                  var q = new Queue
                  q.add("1").add("2").add("3")
                  var pt = q._first;
                  while (pt) {
                      console.log(pt.el)
                      pt = pt._next;
                  }
    
    

    由于这两种结构的每个结点都是对象,因此它可以一直循环下去,直接_next为null。这样就避免[1,0,null,2]这样的集合遇假值中断的麻烦。

    机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
  • 相关阅读:
    python 和 R 语言中的等差数列
    python 用 matplotlib 绘制误差条图
    Python 模拟伯努利试验和二项分布
    R 基于朴素贝叶斯模型实现手机垃圾短信过滤
    PCA 在手写数字数据集上的应用
    R 实现朴素贝叶斯分类器模型
    R语言 绘制正(余)弦图
    R 绘制反正(余)弦图像
    R 绘制正(余)切图像
    R 语言 do.call() 函数
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2785051.html
Copyright © 2011-2022 走看看