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

資訊專欄INFORMATION COLUMN

JS 棧

Lin_R / 3522人閱讀

摘要:棧學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法讀書筆記。棧又名堆棧,是一種遵循后進(jìn)先出原則的有序集合。新添加或待刪除的元素都保存在棧的末尾,稱作棧頂,另一端稱作棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。

《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》讀書筆記。

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

就好比:一個(gè)死胡同,前面是“此路不通”,只有一個(gè)入口,如果一隊(duì)人進(jìn)入,只能隊(duì)尾變對首出去。

JS實(shí)現(xiàn)棧代碼(摘自《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》):

function Stack() {

  /**
   * 用數(shù)組來模擬棧
   */
  var items = [];

  /**
   * 將元素送入棧,放置于數(shù)組的最后一位
   */
  this.push = function(element) {
    items.push(element);
  };

  /**
   * 彈出棧頂元素
   */
  this.pop = function() {
    return items.pop();
  };

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

  /**
   * 確定棧是否為空
   * @return {Boolean} 若棧為空則返回true,不為空則返回false
   */
  this.isAmpty = function() {
    return items.length === 0
  };

  /**
   * 清空棧中所有內(nèi)容
   */
  this.clear = function() {
    items = [];
  };

  /**
   * 返回棧的長度
   * @return {Number} 棧的長度
   */
  this.size = function() {
    return items.length;
  };

  /**
   * 以字符串顯示棧中所有內(nèi)容
   */
  this.print = function() {
    console.log(items.toString());
  };
}

我們可以利用棧來解決十進(jìn)制的轉(zhuǎn)換問題,例如我們將十進(jìn)制數(shù)字轉(zhuǎn)為二進(jìn)制,是將十進(jìn)制數(shù)字不斷地和2整除取余,直到整除為0。

十進(jìn)制轉(zhuǎn)任何進(jìn)制代碼(摘自《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》):

  /**
   * decNumber 要轉(zhuǎn)換的十進(jìn)制數(shù)字
   * base      目標(biāo)進(jìn)制基數(shù)
   */
  function baseConverter(decNumber, base) {
    var remStack = new Stack(),
        rem,
        baseString = "",
        digits = "0123456789ABCDEF";
    white (decNumber > 0) {
        rem = Math.floor(decNumber % base);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / base);
    }
    
    white(!remStack.isEmpty()) {
        baseString += digits[remStack.pop()];
    }
    
    return baseString;
  }
JS 基本數(shù)組操作速查
方法 描述
concat() 連接兩個(gè)或更多的數(shù)組,并返回結(jié)果。
join() 把數(shù)組的所有元素放入一個(gè)字符串。元素通過指定的分隔符進(jìn)行分隔。
pop() 刪除并返回?cái)?shù)組的最后一個(gè)元素。
push() 向數(shù)組的末尾添加一個(gè)或更多元素,并返回新的長度。
reverse() 顛倒數(shù)組中元素的順序。
shift() 刪除并返回?cái)?shù)組的第一個(gè)元素。
slice() 從某個(gè)已有的數(shù)組返回選定的元素。
sort() 對數(shù)組的元素進(jìn)行排序。
splice() 刪除元素,并向數(shù)組添加新元素??捎糜诓迦搿⑻鎿Q
toSource() 返回該對象的源代碼。
toLocaleString() 把數(shù)組轉(zhuǎn)換為本地字符串,并返回結(jié)果。
ushift() 向數(shù)組的開頭添加一個(gè)或更多元素,并返回新的長度。
valueOf() 返回?cái)?shù)組對象的原始值。

附:
JavaScript數(shù)據(jù)結(jié)構(gòu)和算法系列:
JS 隊(duì)列-優(yōu)先隊(duì)列、循環(huán)隊(duì)列

JavaScript設(shè)計(jì)模式系列:
JavaScript設(shè)計(jì)模式之策略模式
JavaScript設(shè)計(jì)模式之發(fā)布-訂閱模式(觀察者模式)-Part1

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

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

相關(guān)文章

  • 你不知道的 JS 錯(cuò)誤和調(diào)用常識

    摘要:錯(cuò)誤堆棧包含了產(chǎn)生該錯(cuò)誤時(shí)完整的調(diào)用棧信息??偨Y(jié)通過本文的描述,相信你對中的調(diào)用棧對象錯(cuò)誤堆棧有了清晰的認(rèn)識,在遇到錯(cuò)誤的時(shí)候不在慌亂。 本文首發(fā)知乎專欄:《前端周刊》。全文共 6988 字,讀完需 10 分鐘,速讀需 3 分鐘。通過剖析 JS 中調(diào)用棧的工作機(jī)制,講解錯(cuò)誤拋出、處理的正確姿勢,以及錯(cuò)誤堆棧的獲取、清理處理方法,希望大家對這個(gè)少有人關(guān)注但極其有用的知識點(diǎn)能夠有所理解和掌...

    tainzhi 評論0 收藏0
  • js 調(diào)用機(jī)制與ES6尾調(diào)用優(yōu)化介紹

    摘要:調(diào)用棧的運(yùn)行機(jī)制機(jī)制程序運(yùn)行到一個(gè)函數(shù),它就會將其添加到調(diào)用棧中,當(dāng)從這個(gè)函數(shù)返回的時(shí)候,就會將這個(gè)函數(shù)從調(diào)用棧中刪掉。在調(diào)用棧中每個(gè)調(diào)用偵都對應(yīng)一個(gè)函數(shù),最上方的調(diào)用幀稱為當(dāng)前幀,調(diào)用棧是由所有的調(diào)用偵形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 調(diào)用棧的英文名叫做Cal...

    AaronYuan 評論0 收藏0
  • JS 調(diào)用機(jī)制與 ES6 尾調(diào)用優(yōu)化介紹

    摘要:在調(diào)用棧中每個(gè)調(diào)用偵都對應(yīng)一個(gè)函數(shù),最上方的調(diào)用幀稱為當(dāng)前幀,調(diào)用棧是由所有的調(diào)用偵形成的。我們應(yīng)該在日常的中,有意識的使用的尾調(diào)用優(yōu)化,來減少調(diào)用棧的長度,節(jié)省客戶端內(nèi)存。調(diào)用棧的英文名叫做Call Stack,大家或多或少是有聽過的,但是對于js調(diào)用棧的工作方式以及如何在工作中利用這一特性,大部分人可能沒有進(jìn)行過更深入的研究,這塊內(nèi)容可以說對我們前端來說就是所謂的基礎(chǔ)知識,咋一看好像用處...

    jemygraw 評論0 收藏0
  • JavaScript事件循環(huán)

    摘要:事件循環(huán)當(dāng)主線程中的任務(wù)執(zhí)行完畢后,會從任務(wù)隊(duì)列中獲取任務(wù)一個(gè)個(gè)的放在棧中執(zhí)行去執(zhí)行,這個(gè)過程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為事件循環(huán)。 寫在前面 說起javascript(以下簡稱js)這門語言,相信大家已經(jīng)非常熟悉了,不管是前端開發(fā)還是后端開發(fā)幾乎無時(shí)無刻都要跟它打交道。雖說開發(fā)者每天幾乎都要操作js,但是你真的確定你掌握了js的運(yùn)行機(jī)制嗎!下面我們就來聊聊這話題。 Ja...

    Corwien 評論0 收藏0
  • js數(shù)據(jù)結(jié)構(gòu)和算法(二)和隊(duì)列

    摘要:對于棧來說,這個(gè)表尾稱為棧的棧頂,相應(yīng)的表頭稱為棧底。棧和隊(duì)列的區(qū)別棧的插入和刪除操作都是在一端進(jìn)行的,而隊(duì)列的操作卻是在兩端進(jìn)行的。出棧操作出棧操作就是在棧頂取出數(shù)據(jù),棧頂指針隨之下移的操作。 基本概念 棧和隊(duì)列都是動態(tài)的集合,在棧中,可以去掉的元素是最近插入的哪一個(gè)。棧實(shí)現(xiàn)了后進(jìn)先出。在隊(duì)列中,可以去掉的元素總是在集合中存在的時(shí)間最長的那一個(gè)。隊(duì)列實(shí)現(xiàn)了先進(jìn)先出的策略。 棧的官...

    jsummer 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<