摘要:棧是一種后進先出的有序集合函數創建棧各種屬性和方法的聲明需要一種數據結構來保存棧里的元素為棧聲明一些方法添加一個或者幾個新元素到棧頂移出棧頂的元素,同時返回被移出的元素返回棧頂的元素,不對棧做任何修改如果棧里沒有任何元素就返回,否則返回移
棧是一種后進先出(LIFO)的有序集合
函數創建棧
</>復制代碼
function Stack() {
// 各種屬性和方法的聲明
item = [];// 需要一種數據結構來保存棧里的元素
// 為棧聲明一些方法
/**
* 添加一個或者幾個新元素到棧頂
* @param element
*/
this.push = function (element) {
item.push(element)
};
/**
* 移出棧頂的元素,同時返回被移出的元素
* @returns {*}
*/
this.pop = function () {
return item.pop()
};
/**
* 返回棧頂的元素,不對棧做任何修改
* @returns {*}
*/
this.peek = function () {
return item[item.length - 1]
};
/**
* 如果棧里沒有任何元素就返回true,否則返回false
* @returns {boolean}
*/
this.isEmpty = function () {
return item.length === 0
};
/**
* 移出棧里的所有元素
*/
this.clear = function () {
item = []
};
/**
* 返回棧里的元素個數
* @returns {Array|number}
*/
this.size = function () {
return item.length
}
}
ES6語法聲明
</>復制代碼
class Stack {
constructor() {
this.items = [];
}
push(element) {
this.items.push(element)
}
// 其他方法
}
/**
* 由于根據原型實現,無法創建私有屬性
*/
/**
* 改進1
* 使用ES6新增類型Symbol,基本類型,通常不可改變
*
* ES6中Object.getOwnPropertySymbol()方法能夠獲取到類里面聲明的所有Symbol屬性,通過這個可以操作其他數組方法
*/
let _items = Symbol();
class Stack {
constructor() {
this[_items] = [];
}
// Stack方法
push(element) {
this[_items].push(element)
}
}
let demo = new Stack();
let objSymbols = Object.getOwnPropertySymbols(demo);
demo[objSymbols[0]].pop();// 可以訪問未暴露的數組方法
/**
* 改進2
* 使用WeakMap實現類(ES6新的集合類型,存儲鍵值對,避開對數組方法的直接訪問)
*/
let Stack = (function () {// 閉包使得外部無法訪問WeekMap,達到私有目的,并且不會暴露其他未暴露的數組方法
const items = new WeakMap();
class InnerStack {
constructor() {
items.set(this, [])
}
push(element) {
items.get(this).push(element)
}
pop() {
return items.get(this).pop()
}
print() {
return items.get(this).toString()
}
}
return InnerStack
})();
// 改進2 的方法使得子類無法繼承私有屬性
棧的應用:十進制轉二進制
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108868.html
摘要:具體來說就是當執行流進入下列任何一個語句時,作用域鏈就會得到加長語句的塊和語句。這兩個語句都會在作用域鏈的前端添加一個變量對象。對來說,會將指定的對象添加到作用域鏈中。 1. 基本類型和引用類型的值 JavaScript變量可以用來保存兩種類型的值:基本類性值和引用類性值。基本類型值源自以下5種基本數據類型:Undefined、Null、Boolean、Number和String。基本...
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
摘要:異或左移右移刪除屬性不同類型之間比較在比較對象時,比較的是引用和是內部方法對不同的類型返回結果如下表對不同類型返回結果如下類申明函數有兩種方法在原型上申明函數,只會創建一次,在所有實例中共享,可以節約內存和降低實例化的開銷在類定義中申明函數 ^ 異或 > 右移 delete 刪除屬性 不同類型之間==比較 showImg(https://segmentfault.c...
數組操作方法 方法 描述 備注 push() 將元素添加到數組末尾 修改原數組 unShift() 將元素插入到數組首位(將每項向后移動一位,在第一位插入元素) 修改原數組 pop() 刪除數組最后一個元素 修改原數組 shift() 刪除數組第一個元素(將每項向前移動一位并刪除最后一項) ...
摘要:在字典中,存儲的是鍵,值,集合可以看作值,值的形式存儲元素,字典也稱為映射方法描述備注向字典中添加新元素通過某個鍵值從字典中移除對應的數據值判斷某個鍵值是存在于這個字典中通過鍵值獲取對應的數據值返回字典所有元素的數量刪除字典中所有元素將字典 在字典中,存儲的是[鍵,值],集合可以看作[值,值]的形式存儲元素,字典也稱為映射 方法 描述 備注 set(key,...
閱讀 1034·2023-04-26 02:26
閱讀 2147·2021-09-26 10:16
閱讀 1553·2019-08-30 12:57
閱讀 3466·2019-08-29 16:10
閱讀 3222·2019-08-29 13:47
閱讀 1188·2019-08-29 13:12
閱讀 2139·2019-08-29 11:11
閱讀 1337·2019-08-26 13:28