使用javascript模拟常见数据结构(一)

  数据结构和算法可算是每个程序员的必备技能,而随着前端工作的深入,对于数据结构的知识真的是越来越需要掌握了。好了,于是乎最近看了《javascript数据结构和算法》,算是对于后面的使用C语言来学习数据结构进行一下预热。恩,这本书的内容倒是也不多,其实就是使用javascript来模拟数据结构,比如使用数组模拟队列和栈,使用对象模拟SET等等,好了,下面上内容。

  一、数组

  这个就不必多说了吧,各种编程语言里面都有的,其在内存里面连续的分布,导致其便于查询,但是不便于增删,比如你把arr是一个五项的数组,你把arr[0]去掉了,后面的四项还要往前挪一个位置。

  下面说下js数组的一些常用的方法吧。数组的增加,push,unshift。数组的删除,pop,shift,当然还有splice方法。

  数组的合并: concat。

  数组的搜索:indexOf, lastIndexOf

  数组的排序:sort(),reverse()。这里注意sort的排序,如果是字符串的话会根据ASCII 码来进行排序,可以传入函数来处理。

  输出为字符串:toString(),join()

  迭代器:every   有一个是false则返回false,否则返回true

      some   有一个是true则返回true

      forEach  迭代整个数组

      map     遍历数组,返回一个新数组

      reduce   累加

      filter     返回符合条件的元素组成的数组

  二、栈  

  是一种遵从后进先出LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近底。

   

function Stack() {
   var items = [];
   this.push = function(element){
      items.push(element);
   };
   this.pop = function(){
      return items.pop();
   };
   this.peek = function(){
      return items[items.length-1];
   };
   this.isEmpty = function(){
      return items.length == 0;
   };
   this.size = function(){
      return items.length;
   };
   this.clear = function(){
      items = [];
   };
   this.print = function(){
      console.log(items.toString());
   };
}

  如上所示,这样就使用数组完成了一个简单的栈结构的构建。

  三、队列

  队列是遵循FIFOFirst In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。 

  

function Queue(){
    
    var items = [];

    this.enqueue = function(element){
        items.push(element);  
    }     
    
    this.dequeue = function(){
        return items.shift();
    }  
    
    this.front = function(){
        return items[0];
    }

    this.isEmpty = function(){
        return items.length == 0;
    } 
    
    this.clear = function(){
        items = [];
    };

    this.size = function(){
        return items.length;
    };

    this.print = function(){
        console.log(items.toString());
    };
}

 

so,这样一个队列的模拟也完成了,OK。

 

  

posted @ 2017-03-22 13:16  史聪  阅读(366)  评论(0编辑  收藏  举报