在javascript中,一些利用原本数组没法轻易解决的问题,其实也是可以通过模拟数据结构来解决问题的,并非是说前端就不需要去学数据结构与算法,懂得数据结构的前端才是真的程序员。

下面简单地用javascript来实现数据结构中的栈结构,栈结构的先入后出性质在解决某些数据问题时很有用

  • 栈的构造函数
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 pop() {
    return this.dataStore[--this.top]
}
  • 获得栈的高度
function length() {
    return this.top;
}

  • 清空整个栈
function clear() {
    this.top = 0;
}
  • 改变栈顶的位置
function peek() {
   return this.dataStore[this.top - 1];
}

下面是一个有趣的例子 利用stack类实现10进制转换为其它进制

function mulBase(num, base) {
    let s = new Stack();
    do {
        s.push(num % base);
        num = Math.floor(num /= base);
    } while (num > 0);
    let content = '';
    while (s.length() > 0) {
        content += s.pop();
    }
    return content;
}
将10进制数9转换为2进制数1001 print(mulBase(9, 2));
又是一个有趣的例子,用栈来判断是否是回文,回文就是一个字符串,从前往后写跟从后往前写都是一样的 例如'racecar','data'
function isPalindrome(word) {
        let s = new Stack();
        for (let i = 0; i < word.length; i++) {
            s.push(word[i]);
        }
        let rword = '';
        while (s.length() > 0) {
            rword += s.pop();
        }
        if (word == rword) {
            return true;
        } else {
            return false;
        }
    }
判断racecar是否是回文 print(isPalindrome('racecar'));用栈可以实现很多方便的功能,可以见得前端了解数据结构尤为重要。

欢迎评论以及留言,同时欢迎关注我的博客定时不断地更新我的文章 陈建光的博客


陈建光
97 声望3 粉丝