Javascript与数据结构系列(一)——栈的完成

栈的完成

完成一个栈,燃眉之急是决议存储数据的底层数据结构。这里采纳的是数组。 我们的完成以定义 Stack 类的组织函数最先:

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

我们用数组 dataStore 保留栈内元素,组织函数将其初始化为一个空数组。变量 top 纪录 栈顶位置,被组织函数初始化为 0,示意栈顶对应数组的肇端位置 0。假如有元素被压入 栈,该变量的值将随之变化。
先来完成 push() 要领。当向栈中压入一个新元素时,须要将其保留在数组中变量 top 所对 应的位置,然后将 top 值加 1,让其指向数组中下一个空位置。代码以下所示:

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() 要领返回数组的第 top-1 个位置的元素,即栈顶元素:

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

假如对一个空栈挪用 peek() 要领,效果为 undefined。这是由于栈是空的,栈顶没有任何
元素。
有时候须要晓得栈内存储了多少个元素。length() 要领经由过程返回变量 top 值的体式格局返回栈 内的元素个数:

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;
}

栈的运用

数制间的互相转换

能够应用栈将一个数字从一种数制转换成另一种数制。假定想将数字 n 转换为以 b 为基数的数字,完成转换的算法以下。

  • 最高位为 n % b,将此位压入栈。

  • 运用n/b替代n。

  • 反复步骤 1 和 2,直到 n 即是 0,且没有余数。

  • 延续将栈内元素弹出,直到栈为空,顺次将这些元素分列,就获得转换后数字的字符
    串情势。

运用栈,在 JavaScript 中完成该算法就是小菜一碟。下面就是该函数的定义,能够将数字 转化为二至九进制的数字:

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;
}

后话

固然,学好前端,你还须要关注一个民众号!——逐日前端
列位兄弟姐妹,共勉!
《Javascript与数据结构系列(一)——栈的完成》

    原文作者:Vagor
    原文地址: https://segmentfault.com/a/1190000004920420
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞