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