Javascript工程師,總會面對一個問題,數據結構和算法會成爲本身的短板,不只是對非科班,甚至一些科班出身的工程師來講也是本身的短板,因而就有了這系列文章。
基礎決定深度,前端入門易,上升困難,學習曲線陡,不少時候就是由於缺乏這些思惟。前端
今天實現的是最基本的數據結構之一 棧算法
棧在js中有着很是重要,基本類型會存儲在棧中,你能夠操做實際的值。數組
要定義一個棧,首先須要明白,棧的基本結構有哪些,須要遵循哪些規則。數據結構
棧是一個線性表,遵循着LIFO原則的有序集合,也就是先進後出,先進入棧的元素,會儲存在棧底,後進入的元素會放在棧頂,就像咱們小時候見過的糧倉同樣,先進入的小麥被放在棧底。而且,棧只有一端是能夠操做的,就是棧頂。數據結構和算法
function Stack() { }
首先建立一個函數(對象)表示棧。
let items = [];
而後須要建立一個數組來保存須要保存的元素。函數
this.push = function(element) { items.push(element) }//調用數組的push方法,將元素加入棧 this.pop = function() { return items.pop(); }//調用數組的pop方法移除棧頂元素而且返回該元素 this.peek = function() { return items[items.length - 1] }//調用數組的peek方法,返回棧頂的第一個元素也就是整個棧的最後一個元素。 this.isEmpty = function() { return items.length == 0; }//檢查棧是否是爲空的,返回布爾值 this.size = function() { return items.length; }//返回棧的長度 this.clear = function() { items = []; }//刪除棧中全部的元素 this.print = function() { console.log(items.toString) }//打出棧全部的元素
接下來須要給棧定義方法學習
function Stack() { let items = []; this.push = function(element) { items.push(element) console.log(this) } 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()) } }
這樣就簡單的建立了棧this
接下來須要試一下棧的基本功能spa
let stack = new Stack();定義一個新的對象 console.log(stack.__proto__)//__proto__等於prototype.constructor
棧就這樣建立完成了。prototype