国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript數(shù)據(jù)結(jié)構(gòu)02 - 棧

legendaryedu / 1783人閱讀

摘要:它們就是棧和隊(duì)列。概念棧是一種遵循后進(jìn)先出原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾,稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。棧也被用在編程語(yǔ)言的編譯器和內(nèi)存中保存變量方法調(diào)用等,比如函數(shù)的調(diào)用棧。

一、定義 1.1 背景

通過(guò)前面一節(jié)《JavaScript數(shù)據(jù)結(jié)構(gòu)01 - 數(shù)組》我們知道,可以在數(shù)組的任意位置上刪除或添加元素。然而,有時(shí)候我們還需要一種在添加或刪除元素時(shí)有更多控制的數(shù)據(jù)結(jié)構(gòu)。

有兩種數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組,但在添加和刪除元素時(shí)更為可控。

它們就是棧和隊(duì)列

1.2 概念

是一種遵循后進(jìn)先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾,稱作棧頂,另一端就叫棧底

在棧里,新元素都靠近棧頂,舊元素都接近棧底。

棧也被用在編程語(yǔ)言的編譯器和內(nèi)存中保存變量、方法調(diào)用等,比如函數(shù)的調(diào)用棧。

二、棧的實(shí)現(xiàn) 2.1 創(chuàng)建一個(gè)類來(lái)表示棧

這里我還是用構(gòu)造函數(shù)的形式來(lái)書寫,大家有興趣可以用ES6的Class來(lái)重寫一遍。

// Stack類
function Stack () {
  this.items = [];

  this.push = push;
  this.pop = pop;
  this.peek = peek;
  this.isEmpty = isEmpty;
  this.clear = clear;
  this.size = size;
  this.print = print;
}

棧里面有一些聲明的方法:

push(element):添加一個(gè)(或幾個(gè))新元素到棧頂

pop():移除棧頂?shù)脑兀瑫r(shí)返回被移除的元素

peek():返回棧頂?shù)脑兀粚?duì)棧做任何修改

isEmpty():如果棧里沒(méi)有任何元素就返回true,否則返回false

clear():移除棧里的所有元素

size():返回棧里的元素個(gè)數(shù)

2.2 實(shí)現(xiàn)棧中的輔助方法
// 添加新元素到棧頂
function push (element) {
  this.items.push(element);
}

// 移除棧頂元素,同時(shí)返回被移除的元素
function pop () {
  return this.items.pop();
}

// 查看棧頂元素
function peek () {
  return this.items[this.items.length - 1];
}

// 判斷是否為空棧
function isEmpty () {
  return this.items.length === 0;
}

// 清空棧
function clear () {
  this.items = [];
}

// 查詢棧的長(zhǎng)度
function size () {
  return this.items.length;
}

// 打印棧里的元素
function print () {
  console.log(this.items.toString());
}
2.3 創(chuàng)建實(shí)例進(jìn)行測(cè)試
// 創(chuàng)建Stack實(shí)例
var stack = new Stack();

console.log(stack.isEmpty());     // true
stack.push(5);                    // undefined
stack.push(8);                    // undefined
console.log(stack.peek());        // 8
stack.push(11);                   // undefined
console.log(stack.size());        // 3
console.log(stack.isEmpty());     // false
stack.push(15);                   // undefined
stack.pop();                      // 15
console.log(stack.size());        // 3
stack.print();                    // 5,8,11
stack.clear();                    // undefined
console.log(stack.size());        // 0
三、結(jié)束

本文會(huì)同步到我的個(gè)人博客,完整代碼可以到我的github倉(cāng)庫(kù)查看,如果對(duì)你有幫助的話歡迎點(diǎn)一個(gè)Star~~

歡迎關(guān)注我的公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/96283.html

相關(guān)文章

  • Day02 - JavaScript + CSS Clock

    摘要:作者簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。完整指南在從零到壹全棧部落。通過(guò)時(shí)分秒對(duì)一圈度,進(jìn)行映射,確定每一個(gè)指針?biāo)栊D(zhuǎn)的角度。此前的代碼中,每秒都會(huì)重新一個(gè)對(duì)象,用來(lái)計(jì)算角度值,但如果讓這個(gè)角度值一直保持增長(zhǎng),也就不會(huì)出現(xiàn)逆時(shí)針回旋的問(wèn)題了。 Day02 - JavaScript + CSS Clock 作者:?liyuechun 簡(jiǎn)介:JavaScript30 是 Wes Bos 推出的一個(gè)...

    zzbo 評(píng)論0 收藏0
  • 前端基礎(chǔ)進(jìn)階(一):內(nèi)存空間詳細(xì)圖解

    摘要:一棧數(shù)據(jù)結(jié)構(gòu)與不同,中并沒(méi)有嚴(yán)格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對(duì)象。不允許直接訪問(wèn)堆內(nèi)存中的位置,因此我們不能直接操作對(duì)象的堆內(nèi)存空間。為了更好的搞懂變量對(duì)象與堆內(nèi)存,我們可以結(jié)合以下例子與圖解進(jìn)行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 評(píng)論0 收藏0
  • 【Step-By-Step】一周面試題深入解析 / 周刊02

    摘要:關(guān)于點(diǎn)擊進(jìn)入項(xiàng)目是我于開始的一個(gè)項(xiàng)目,每個(gè)工作日發(fā)布一道面試題。即使這個(gè)時(shí)間周期內(nèi),小明取得多次滿分。創(chuàng)建作用域鏈在執(zhí)行期上下文的創(chuàng)建階段,作用域鏈?zhǔn)窃谧兞繉?duì)象之后創(chuàng)建的。這種一層一層的關(guān)系,就是作用域鏈。 關(guān)于【Step-By-Step】 Step-By-Step (點(diǎn)擊進(jìn)入項(xiàng)目) 是我于 2019-05-20 開始的一個(gè)項(xiàng)目,每個(gè)工作日發(fā)布一道面試題。每個(gè)周末我會(huì)仔細(xì)閱讀大家的答...

    ixlei 評(píng)論0 收藏0
  • 【Step-By-Step】一周面試題深入解析 / 周刊02

    摘要:關(guān)于點(diǎn)擊進(jìn)入項(xiàng)目是我于開始的一個(gè)項(xiàng)目,每個(gè)工作日發(fā)布一道面試題。即使這個(gè)時(shí)間周期內(nèi),小明取得多次滿分。創(chuàng)建作用域鏈在執(zhí)行期上下文的創(chuàng)建階段,作用域鏈?zhǔn)窃谧兞繉?duì)象之后創(chuàng)建的。這種一層一層的關(guān)系,就是作用域鏈。 關(guān)于【Step-By-Step】 Step-By-Step (點(diǎn)擊進(jìn)入項(xiàng)目) 是我于 2019-05-20 開始的一個(gè)項(xiàng)目,每個(gè)工作日發(fā)布一道面試題。每個(gè)周末我會(huì)仔細(xì)閱讀大家的答...

    BDEEFE 評(píng)論0 收藏0
  • 2017-07-02 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選譯,和的未來(lái)學(xué)習(xí)筆記箭頭函數(shù)學(xué)習(xí)筆記教程?hào)鸥癫季志硗林貋?lái),用還是為什么我會(huì)選擇而不是眾成翻譯原生開發(fā)入門完全教程從零到壹全棧部落中文一個(gè)端帶文件路徑和顏色的攻城方略譯使用提高應(yīng)用程序的種方式中自定義操作符修仙 2017-07-02 前端日?qǐng)?bào) 精選 [譯] TC39,ECMAScript 和 JavaScript 的未來(lái)(Part 1)ES6學(xué)習(xí)筆記:箭頭函數(shù)_ES6, Ja...

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

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

0條評(píng)論

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