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

資訊專欄INFORMATION COLUMN

JS-實現(xiàn)入棧出棧

JiaXinYi / 2133人閱讀

摘要:實現(xiàn)入棧出棧什么是棧棧是一種遵循后進先出原則的有序集合。新添加的或者待刪除的元素都保存在棧的尾部即棧頂,另一端叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。實現(xiàn)入棧出棧的方法方法一是創(chuàng)建一個類來表示棧。

JS-實現(xiàn)入棧出棧 1、什么是棧

棧是一種遵循 后進先出(LIFO) 原則的有序集合。新添加的或者待刪除的元素都保存在棧的尾部(即棧頂),另一端叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。

2、實現(xiàn)入棧出棧的方法

方法一是創(chuàng)建一個Stack類來表示棧。具體代碼如下:

function Stack() {
  var items = [];

  // 添加一個(或幾個)新元素到棧頂
  this.push = function(ele) {
    items.push(ele);
  };
    
  // 移除棧頂?shù)脑?,同時返回被移除的元素
  this.pop = function() {
    return items.pop();
  };

  // 返回棧頂?shù)脑?,不對棧做任何修?  this.peek = function() {
    return items[items.length - 1];
  };

  // 判斷棧里使是否還有元素
  this.isEmpty = function() {
    return items.length == 0;
  };

  // 移除棧里所有的元素
  this.clear = function() {
    items = [];
  };

  // 返回棧里的元素個數(shù)
  this.size = function() {
    return items.length;
  };

  this.print = function() {
    console.log(items.toString());
  };
}
var stack = new Stack();
console.log(stack.isEmpty());
stack.push(1);
stack.push(8);
console.log(stack.peek());
stack.push(10);
console.log(stack.peek());
console.log(stack.size());
console.log(stack.isEmpty());
console.log(14)
stack.pop();
stack.pop();
stack.print();

另一種方式就是通過push將元素推入棧頂,然后遍歷棧里的內(nèi)容,刪除棧頂元素,因為在棧頂元素被刪除的時候,數(shù)組的長度是一直在變化的,所以要先將數(shù)組的長度賦值給len,來確保每次刪除的是棧頂元素

function stack2 () {
    var arr = []
    for(let i = 0; i < 5; i ++){
        var temp = i + 1;
        arr.push(temp)
        console.log(temp + "入棧")
        console.log(arr)
    }
    console.log("arr內(nèi)容:" + arr)
    var len = arr.length
    for(let i = 0; i < len; i++) {
        console.log("當(dāng)前棧的長度:" + arr.length)
        console.log("刪除棧頂元素:" + arr.pop())
    }
}
stack2()
3、入棧出棧的實際應(yīng)用

棧的實際應(yīng)用之一就是實現(xiàn)十進制轉(zhuǎn)化為任意進制
以十進制轉(zhuǎn)化為二進制為例:要把十進制轉(zhuǎn)化成二進制,我們可以將十進制數(shù)字和2整除(二進制是蠻二進一),直到結(jié)果是0為止。其轉(zhuǎn)化過程大致如下:

// 將十進制轉(zhuǎn)為任意進制
function baseConerter(decNumber, base){
    var remStack = new Stack(),
        rem,
        baseString = "",
        digits = "0123456789ABCDEF"
    while (decNumber > 0) {
        rem = Math.floor(decNumber % base)
        remStack.push(rem)
        decNumber = Math.floor(decNumber / base)
    }
    while (!remStack.isEmpty()){
        baseString += digits[remStack.pop()]
    }
    console.log("baseString:" + baseString)
    return baseString
}
baseConerter(223411, 2)    // 110110100010110011
baseConerter(223411, 8)    // 664263
baseConerter(223411, 16)  // 368B3

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

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

相關(guān)文章

  • 棧和隊列 - Algorithms, Part I, week 2 STACKS AND QUEUE

    摘要:在改進前使用數(shù)組的一個缺點是必須聲明數(shù)組的大小,所以棧有確定的容量。待解決的問題建立一個能夠增長或者縮短到任意大小的棧。下邊的圖是觀察時間開銷的另一種方式,表示了入棧操作需要訪問數(shù)組的次數(shù)。 前言 上一篇:算法分析下一篇:基本排序 本篇內(nèi)容主要是棧,隊列 (和包)的基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)文章里頭所有的對數(shù)函數(shù)都是以 2 為底關(guān)于性能分析,可能還是需要一些數(shù)學(xué)知識,有時間可以回一下在很多...

    Stardustsky 評論0 收藏0
  • leetcode232 Implement Queue using Stacks

    摘要:題目要求通過隊列實現(xiàn)一個棧的功能。棧的為壓入棧頂,出棧,棧頂元素,棧是否為空。重復(fù)上述的操作。但是當(dāng)需要彈出元素時,則從桶彈出。這樣,下次加入的元素必然全部位于桶后的所有元素,而桶中的元素也能保證位輸入順序。極大的減少了不必要的入棧出棧。 題目要求 Implement the following operations of a queue using stacks. push(x) ...

    golden_hamster 評論0 收藏0
  • 基于JavaScript的簡單解釋器實現(xiàn)(一)——表達式的語法樹生成

    摘要:語法樹這一章主要是完成語法樹的生成。其中由于函數(shù)聲明部分過于簡單,沒必要生成語法樹,打算留到下一章一起處理。主循環(huán)結(jié)束后數(shù)據(jù)棧中的第一位元素則為語法樹。這是最后生成的語法樹總結(jié)總之,語法樹就算是生成完畢了。 前言 這個系列是關(guān)于CodeWars上的一條1Kyu題:Simple Interactive Interpreter。也就是實現(xiàn)一個簡單的交互式解釋器。題目地址:http://ww...

    DataPipeline 評論0 收藏0
  • 以最簡單的例子,深入剖析函數(shù)如何進行初始化工作,入棧出棧全過程

    摘要:在一個函數(shù)中的內(nèi)容執(zhí)行前會做一些變量的初始化工作,就是圖中下的內(nèi)容。輸出完后,函數(shù)出棧,函數(shù)變?yōu)榛顒訝顟B(tài),因為沒有返回值,所以仍然為同時執(zhí)行下一語句,如下圖執(zhí)行與相同,先是函數(shù)入棧,輸出然后將返回值賦給后出棧。 window.onload = function(){ debugger; var variable1,//定義變量1但沒有賦值...

    lastSeries 評論0 收藏0
  • 結(jié)合作用域,執(zhí)行上下文圖解閉包

    摘要:作用域鏈所謂作用域鏈,是由當(dāng)前環(huán)境與上層環(huán)境的一系列變量對象組成,它保證當(dāng)前執(zhí)行環(huán)境對符合訪問權(quán)限的變量和函數(shù)的有序訪問。當(dāng)我們在執(zhí)行函數(shù)的時候,需要的變量,在自己的作用域內(nèi)找不到,便會順著作用域鏈往上找,直到找到全局作用域。 一 作用域相關(guān)? ? ? 作用域是一套規(guī)則,用來管理引擎如何查找變量。在es5之前,js只有全局作用域及函數(shù)作用域。es6引入了塊級作用域。但是這個塊級別作用域...

    msup 評論0 收藏0

發(fā)表評論

0條評論

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