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

資訊專欄INFORMATION COLUMN

Javascript與數(shù)據(jù)結構系列(一)——棧的實現(xiàn)

Travis / 3030人閱讀

摘要:棧的實現(xiàn)實現(xiàn)一個棧當務之急是決定存儲數(shù)據(jù)的底層數(shù)據(jù)結構。變量記錄棧頂位置被構造函數(shù)初始化為表示棧頂對應數(shù)組的起始位置。這是因為棧是空的棧頂沒有任何元素。假設想將數(shù)字轉換為以為基數(shù)的數(shù)字實現(xiàn)轉換的算法如下。

棧的實現(xiàn)

實現(xiàn)一個棧,當務之急是決定存儲數(shù)據(jù)的底層數(shù)據(jù)結構。這里采用的是數(shù)組。 我們的實現(xiàn)以定義 Stack 類的構造函數(shù)開始:

function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
}

我們用數(shù)組 dataStore 保存棧內(nèi)元素,構造函數(shù)將其初始化為一個空數(shù)組。變量 top 記錄 棧頂位置,被構造函數(shù)初始化為 0,表示棧頂對應數(shù)組的起始位置 0。如果有元素被壓入 棧,該變量的值將隨之變化。
先來實現(xiàn) push() 方法。當向棧中壓入一個新元素時,需要將其保存在數(shù)組中變量 top 所對 應的位置,然后將 top 值加 1,讓其指向數(shù)組中下一個空位置。代碼如下所示:

function push(element) {
    this.dataStore[this.top++] = element;
}

這里要特別注意 ++ 操作符的位置,它放在 this.top 的后面,這樣新入棧的元素就被放在 top 的當前值對應的位置,然后再將變量 top 的值加 1,指向下一個位置。
pop() 方法恰好與 push() 方法相反——它返回棧頂元素,同時將變量 top 的值減 1:

function pop() {
    return this.dataStore[--this.top];
}

peek() 方法返回數(shù)組的第 top-1 個位置的元素,即棧頂元素:

function peek() {
    return this.dataStore[this.top-1];
}

如果對一個空棧調用 peek() 方法,結果為 undefined。這是因為棧是空的,棧頂沒有任何
元素。
有時候需要知道棧內(nèi)存儲了多少個元素。length() 方法通過返回變量 top 值的方式返回棧 內(nèi)的元素個數(shù):

function length() {
    return this.top;
}

最后,可以將變量 top 的值設為 0,輕松清空一個棧:

function clear() {
    this.top = 0;
}
代碼歸納
function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}

function push(element) {
    this.dataStore[this.top++] = element;
}

function peek() {
    return this.dataStore[this.top-1];
}

function pop() {
    return this.dataStore[--this.top];
}

function clear() {
    this.top = 0;
}

function length() {
    return this.top;
}
棧的應用 數(shù)制間的相互轉換

可以利用棧將一個數(shù)字從一種數(shù)制轉換成另一種數(shù)制。假設想將數(shù)字 n 轉換為以 b 為基數(shù)的數(shù)字,實現(xiàn)轉換的算法如下。

最高位為 n % b,將此位壓入棧。

使用n/b代替n。

重復步驟 1 和 2,直到 n 等于 0,且沒有余數(shù)。

持續(xù)將棧內(nèi)元素彈出,直到棧為空,依次將這些元素排列,就得到轉換后數(shù)字的字符
串形式。

使用棧,在 JavaScript 中實現(xiàn)該算法就是小菜一碟。下面就是該函數(shù)的定義,可以將數(shù)字 轉化為二至九進制的數(shù)字:

function mulBase(num, base) {
    var s = new Stack();
    do {
        s.push(num % base);
        num = Math.floor(num /= base);
    } while (num > 0);
    var converted = "";
    while (s.length() > 0) {
        converted += s.pop();
    }
    return converted;
}

后話

當然,學好前端,你還需要關注一個公眾號!——每日前端
各位兄弟姐妹,共勉!

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

轉載請注明本文地址:http://systransis.cn/yun/79170.html

相關文章

  • 【譯】JavaScript數(shù)據(jù)結構(2):棧隊列

    摘要:棧和隊列是開發(fā)中最常用的兩種數(shù)據(jù)結構。如果又有數(shù)據(jù)入棧,的值將增加到。如果一個數(shù)據(jù)從棧中被取出,的值將會減少為。隊列與棧類似,隊列也是一個線性數(shù)據(jù)結構。與棧不同的是,隊列只刪除最先添加的數(shù)據(jù)?,F(xiàn)在,讓我們將棧大小的實現(xiàn)應用到隊列中。 翻譯:瘋狂的技術宅英文:https://code.tutsplus.com/art...說明:本文翻譯自系列文章《Data Structures With...

    zlyBear 評論0 收藏0
  • JS 棧

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

    Lin_R 評論0 收藏0
  • 學習JavaScript數(shù)據(jù)結構算法():棧隊列

    摘要:之數(shù)組操作接下來就是數(shù)據(jù)結構的第一部分,棧。以字符串顯示棧中所有內(nèi)容方法的實現(xiàn)說明需要往棧中添加新元素,元素位置在隊列的末尾。的前端樂園原文鏈接寒假前端學習學習數(shù)據(jù)結構與算法,棧與隊列 本系列的第一篇文章: 學習JavaScript數(shù)據(jù)結構與算法(一),棧與隊列第二篇文章:學習JavaScript數(shù)據(jù)結構與算法(二):鏈表第三篇文章:學習JavaScript數(shù)據(jù)結構與算法(三):集合第...

    Flink_China 評論0 收藏0
  • javasctipt 工作原理之調用棧

    摘要:譯者注翻譯一個對新手比較友好的工作原理解析系列文章注意以下全部是概念經(jīng)驗豐富的老鳥可以離場啦正文從這里開始隨著的流行團隊們正在利用來支持多個級別的技術棧包括前端后端混合開發(fā)嵌入式設備以及更多這篇文章旨在成為深入挖掘和實際上他是怎么工作的系列 譯者注 翻譯一個對新手比較友好的 JavaScript 工作原理解析系列文章 注意: 以下全部是概念,經(jīng)驗豐富的老鳥可以離場啦 正文從這里開始 隨...

    Pines_Cheng 評論0 收藏0

發(fā)表評論

0條評論

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