JS 裡的資料結構 - 棧

yingpengsha發表於2019-03-27

開篇語

未來將會結合《學習 JavaScript 資料結構和演算法》這本書寫一系列的演算法筆記。
之所以想要深入學習演算法的原因,是前段時間阿里的校招讓我打擊很大,自信心受到了強烈的衝擊。但好在我是一個從來不怕低谷的人,也十分慶幸在很早的時間點裡受到遲早該受到的挫折。

逝者如斯,故不捨晝夜。

棧資料結構

是一種遵循後進先出( LIFO )原理的有序集合。新添的或待刪除的元素都儲存在棧的同一段,稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。

JS 裡的資料結構 - 棧

JavaScript 裡的 Stack 類

建立一個 Stack 類的建構函式

function Stack(){
  // 各種屬性和方法的宣告
}
複製程式碼

需要一種資料結構來儲存棧裡的元素

function Stack(){
  let items = [];
  // 各種屬性和方法的宣告
}
複製程式碼

向棧裡新增元素

新增一個 push 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
}
複製程式碼

從棧裡刪除元素

新增一個 pop 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
  this.pop = function(item){
    items.pop(item);
  }
}
複製程式碼

檢視棧頂元素

新增一個 peek 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
  this.pop = function(item){
    items.pop(item);
  }
  this.peek = function(){
    return items[items.length - 1];
  }
}
複製程式碼

檢查棧是否為空

新增一個 isEmpty 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
  this.pop = function(item){
    items.pop(item);
  }
  this.peek = function(){
    return items[items.length - 1];
  }
  this.isEmpty = function(){
    return items.length == 0;
  }
}
複製程式碼

清空棧的內容

新增一個 clear 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
  this.pop = function(item){
    items.pop(item);
  }
  this.peek = function(){
    return items[items.length - 1];
  }
  this.isEmpty = function(){
    return items.length == 0;
  }
  this.clear = function(){
    items = []; 
  }
}
複製程式碼

列印棧的內容

新增一個 print 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
  this.pop = function(item){
    items.pop(item);
  }
  this.peek = function(){
    return items[items.length - 1];
  }
  this.isEmpty = function(){
    return items.length == 0;
  }
  this.clear = function(){
    items = []; 
  }
  this.print = function(){
    console.log(items.toString());
  }
}
複製程式碼

輸出棧的元素數量

新增一個 size 方法

function Stack(){
  let items = [];
  this.push = function(item){
    items.push(item);
  }
  this.pop = function(item){
    items.pop(item);
  }
  this.peek = function(){
    return items[items.length - 1];
  }
  this.isEmpty = function(){
    return items.length == 0;
  }
  this.clear = function(){
    items = []; 
  }
  this.print = function(){
    console.log(items.toString());
  }
  this.size = function(){
    console.log(items.length);
  }
}
複製程式碼

使用 Stack 類

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

let stack = new Stack();
stack.push('one');
stack.print(); // one
stack.size(); // 1
console.log(stack.peek()); // one
複製程式碼

相關文章