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]这样的集合遇假值中断的麻烦。

    机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
  • 相关阅读:
    搞一个先试试
    java map排序
    文件上传
    文件下载
    Filter过滤器
    java编写一个简单的验证码
    centos7安装mysql
    linux安装jdk,tomcat服务器
    DBUtil工具类
    mysql
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2785051.html
Copyright © 2011-2022 走看看