摘要:棧是一種后進(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
摘要:具體來說就是當(dāng)執(zhí)行流進(jìn)入下列任何一個(gè)語句時(shí),作用域鏈就會(huì)得到加長語句的塊和語句。這兩個(gè)語句都會(huì)在作用域鏈的前端添加一個(gè)變量對(duì)象。對(duì)來說,會(huì)將指定的對(duì)象添加到作用域鏈中。 1. 基本類型和引用類型的值 JavaScript變量可以用來保存兩種類型的值:基本類性值和引用類性值?;绢愋椭翟醋砸韵?種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number和String?;?..
摘要:哪吒社區(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...
摘要:異或左移右移刪除屬性不同類型之間比較在比較對(duì)象時(shí),比較的是引用和是內(nèi)部方法對(duì)不同的類型返回結(jié)果如下表對(duì)不同類型返回結(jié)果如下類申明函數(shù)有兩種方法在原型上申明函數(shù),只會(huì)創(chuàng)建一次,在所有實(shí)例中共享,可以節(jié)約內(nèi)存和降低實(shí)例化的開銷在類定義中申明函數(shù) ^ 異或 > 右移 delete 刪除屬性 不同類型之間==比較 showImg(https://segmentfault.c...
數(shù)組操作方法 方法 描述 備注 push() 將元素添加到數(shù)組末尾 修改原數(shù)組 unShift() 將元素插入到數(shù)組首位(將每項(xiàng)向后移動(dòng)一位,在第一位插入元素) 修改原數(shù)組 pop() 刪除數(shù)組最后一個(gè)元素 修改原數(shù)組 shift() 刪除數(shù)組第一個(gè)元素(將每項(xiàng)向前移動(dòng)一位并刪除最后一項(xiàng)) ...
摘要:在字典中,存儲(chǔ)的是鍵,值,集合可以看作值,值的形式存儲(chǔ)元素,字典也稱為映射方法描述備注向字典中添加新元素通過某個(gè)鍵值從字典中移除對(duì)應(yīng)的數(shù)據(jù)值判斷某個(gè)鍵值是存在于這個(gè)字典中通過鍵值獲取對(duì)應(yīng)的數(shù)據(jù)值返回字典所有元素的數(shù)量刪除字典中所有元素將字典 在字典中,存儲(chǔ)的是[鍵,值],集合可以看作[值,值]的形式存儲(chǔ)元素,字典也稱為映射 方法 描述 備注 set(key,...
閱讀 1042·2023-04-26 02:26
閱讀 2156·2021-09-26 10:16
閱讀 1563·2019-08-30 12:57
閱讀 3473·2019-08-29 16:10
閱讀 3229·2019-08-29 13:47
閱讀 1198·2019-08-29 13:12
閱讀 2147·2019-08-29 11:11
閱讀 1344·2019-08-26 13:28