1. 程式人生 > 其它 >棧的實現(JavaScript)

棧的實現(JavaScript)

技術標籤:資料結構資料結構js

棧的資料結構

是一種遵循一種後進先出(LIFO)原則的有序集合。
後進先出(LIFO)即新新增或待刪除的元素都會儲存到棧的一端,這一端稱為棧頂,另一端稱為棧低。

由於要遵循LIPO原則,需要對元素的插入和刪除功能進行限制,所以我們需要宣告以下方法:

push(element):新增一個或多個元素
pop():移除棧頂元素
peek():返回棧頂元素,不做修改
isEmpty():判斷棧是否為空
clear():清空棧
size():返回棧元素的個數

下面寫一個用WeakMap的方法來實現:

//使用WeakMap方法來實現Stack
	const
items = new WeakMap();//宣告一個WeakMap型別的變數items //建立一個類來表示棧 class Stack { constructor(element) { items.set(this,[]);//在constructor中,以this(Stack類自己的引用)為鍵,把代表棧的陣列存入items } //新增新元素的方法 push(element){ const s = items.get(this);//定義一個s來表示Stack中的items s.push(element);//進行新增 } //移除棧頂元素的方法 pop(){ const
s = items.get(this); const res = s.pop(); return res; } //返回棧頂元素的方法 peek(){ const s = items.get(this); return s[s.length - 1]; } //判斷棧是否為空的方法 isEmpty(){ const s = items.get(this); return s.length === 0; } //清空棧的方法 clear(){ const s = items.get(this); s = []; } //判斷棧長度大小的方法
size(){ const s = items.get(this); return s.length; } //打印出棧的內容的方法 toString(){ const s = items.get(this); if(this.isEmpty()) return undefined; let objString = `${s[0]}`; for(let i = 1; i < s.length; i++){ objString = `${objString} , ${s[i]}`; } return objString; } }

用WeakMap實現類的好處就是可以確保屬性是私有的,因為我們希望Stack類中只能訪問在類中暴露的方法,並不希望棧也就是items可以被訪問;但是用WeakMap程式碼的可讀性並不高,而且在擴充套件該類時無法繼承私有屬性。