成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》筆記——第3章 棧

cyqian / 1343人閱讀

摘要:棧是一種后進(jìn)先出的有序集合函數(shù)創(chuàng)建棧各種屬性和方法的聲明需要一種數(shù)據(jù)結(jié)構(gòu)來保存棧里的元素為棧聲明一些方法添加一個(gè)或者幾個(gè)新元素到棧頂移出棧頂?shù)脑?,同時(shí)返回被移出的元素返回棧頂?shù)脑?,不?duì)棧做任何修改如果棧里沒有任何元素就返回,否則返回移

棧是一種后進(jìn)先出(LIFO)的有序集合

函數(shù)創(chuàng)建棧

function Stack() {
    // 各種屬性和方法的聲明
    item = [];// 需要一種數(shù)據(jù)結(jié)構(gòu)來保存棧里的元素
    // 為棧聲明一些方法
    /**
     * 添加一個(gè)或者幾個(gè)新元素到棧頂
     * @param element
     */
    this.push = function (element) {
        item.push(element)
    };
    /**
     * 移出棧頂?shù)脑?,同時(shí)返回被移出的元素
     * @returns {*}
     */
    this.pop = function () {
        return item.pop()
    };
    /**
     * 返回棧頂?shù)脑兀粚?duì)棧做任何修改
     * @returns {*}
     */
    this.peek = function () {
        return item[item.length - 1]
    };
    /**
     * 如果棧里沒有任何元素就返回true,否則返回false
     * @returns {boolean}
     */
    this.isEmpty = function () {
        return item.length === 0
    };
    /**
     * 移出棧里的所有元素
     */
    this.clear = function () {
        item = []
    };
    /**
     * 返回棧里的元素個(gè)數(shù)
     * @returns {Array|number}
     */
    this.size = function () {
        return item.length
    }
}

ES6語法聲明

class Stack {
    constructor() {
        this.items = [];
    }
    push(element) {
        this.items.push(element)
    }
    // 其他方法
}
/**
 * 由于根據(jù)原型實(shí)現(xiàn),無法創(chuàng)建私有屬性
 */
/**
 * 改進(jìn)1
 * 使用ES6新增類型Symbol,基本類型,通常不可改變
 *
 * ES6中Object.getOwnPropertySymbol()方法能夠獲取到類里面聲明的所有Symbol屬性,通過這個(gè)可以操作其他數(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實(shí)現(xiàn)類(ES6新的集合類型,存儲(chǔ)鍵值對(duì),避開對(duì)數(shù)組方法的直接訪問)
 */
let Stack = (function () {// 閉包使得外部無法訪問WeekMap,達(dá)到私有目的,并且不會(huì)暴露其他未暴露的數(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108868.html

相關(guān)文章

  • JS學(xué)習(xí)筆記4)(變量、作用域和內(nèi)存問題)

    摘要:具體來說就是當(dāng)執(zhí)行流進(jìn)入下列任何一個(gè)語句時(shí),作用域鏈就會(huì)得到加長語句的塊和語句。這兩個(gè)語句都會(huì)在作用域鏈的前端添加一個(gè)變量對(duì)象。對(duì)來說,會(huì)將指定的對(duì)象添加到作用域鏈中。 1. 基本類型和引用類型的值 JavaScript變量可以用來保存兩種類型的值:基本類性值和引用類性值?;绢愋椭翟醋砸韵?種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number和String?;?..

    linkin 評(píng)論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評(píng)論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)算法筆記——1 JavaScript簡(jiǎn)介

    摘要:異或左移右移刪除屬性不同類型之間比較在比較對(duì)象時(shí),比較的是引用和是內(nèi)部方法對(duì)不同的類型返回結(jié)果如下表對(duì)不同類型返回結(jié)果如下類申明函數(shù)有兩種方法在原型上申明函數(shù),只會(huì)創(chuàng)建一次,在所有實(shí)例中共享,可以節(jié)約內(nèi)存和降低實(shí)例化的開銷在類定義中申明函數(shù) ^ 異或 > 右移 delete 刪除屬性 不同類型之間==比較 showImg(https://segmentfault.c...

    Cheng_Gang 評(píng)論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)算法筆記——2 數(shù)組

    數(shù)組操作方法 方法 描述 備注 push() 將元素添加到數(shù)組末尾 修改原數(shù)組 unShift() 將元素插入到數(shù)組首位(將每項(xiàng)向后移動(dòng)一位,在第一位插入元素) 修改原數(shù)組 pop() 刪除數(shù)組最后一個(gè)元素 修改原數(shù)組 shift() 刪除數(shù)組第一個(gè)元素(將每項(xiàng)向前移動(dòng)一位并刪除最后一項(xiàng)) ...

    Martin91 評(píng)論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)算法筆記——7 字典和散列表

    摘要:在字典中,存儲(chǔ)的是鍵,值,集合可以看作值,值的形式存儲(chǔ)元素,字典也稱為映射方法描述備注向字典中添加新元素通過某個(gè)鍵值從字典中移除對(duì)應(yīng)的數(shù)據(jù)值判斷某個(gè)鍵值是存在于這個(gè)字典中通過鍵值獲取對(duì)應(yīng)的數(shù)據(jù)值返回字典所有元素的數(shù)量刪除字典中所有元素將字典 在字典中,存儲(chǔ)的是[鍵,值],集合可以看作[值,值]的形式存儲(chǔ)元素,字典也稱為映射 方法 描述 備注 set(key,...

    zorro 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<