JavaScript數據結構與算法--棧(上)

數據結構中的棧結構是一種遵循 後進先出(last in first out)原則的一個有序集合,新添加的元素保存在棧頂,最先插入的元素在棧底。

棧中一些常見的方法:
push(element) 添加新元素到棧頂,也可以一次添加多個。
pop() 移除棧頂元素,同時返回被移除的元素。
peek() 返回棧頂元素,不對棧做任何修改(不會移除棧頂元素)。
isEmpty() 判斷棧是否爲空,爲空返回true,不爲空返回false。
size() 返回棧裏的元素個數。類似於數組中的length屬性。
clear() 清除棧裏的所有元素。

棧中大致就是上面的幾種操作,下面我們就開始封裝一個棧,在JavaScript中封裝一個棧有兩種思想:
(1)基於數組創建一個棧 。
(2)基於JavaScript對象創建一個棧。

(1)基於數組創建一個棧

    //創建一個基於數組的棧
    //封裝棧類
    function MyStack(){
      this.items = []; //創建一個數組

      //1,向棧添加元素
      MyStack.prototype.push = function(element){
          for(let i=0;i<arguments.length;i++){
            this.items[this.items.length] = arguments[i]
          }
          return this.items.length;
      }

      //2,從棧中移除元素
      MyStack.prototype.pop = function(){
        return this.items.pop();
      }
      //3,查看棧頂元素
      MyStack.prototype.peek = function(){
        return this.items[this.items.length - 1];
      }
      //4,判斷棧是否爲空
      MyStack.prototype.isEmpty = function(){
        return this.items.length == 0;
      }
      //5,獲取棧中元素個數
      MyStack.prototype.size = function(){
        return this.items.length;
      }
      //6,清空棧元素
      MyStack.prototype.clear = function(){
        return this.items = [];
      }
    }
    
    //棧的使用
    var s = new MyStack();
    s.push(10);
    s.push(20);
    s.push(30);
    console.log(s.peek()); //30
    console.log(s.isEmpty()); //false
    console.log(s.size()); //3

    s.pop(); 
    console.log(s.peek()); //20
    console.log(s.size()); //2
    s.clear(); 
    console.log(s.isEmpty()) //true

上面就是我基於數組封裝的一個棧,關於另一個基於JavaScript對象創建一個棧下次繼續哦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章