《学习JavaScript数据结构与算法》笔记---栈

本文源码 这里

概念
栈的特点就是后进先出。栈有栈顶和栈底的概念。用数组举例子,数组第一个位置这边就是栈底,最后一个元素的位置就是栈顶,新添加的元素保存在栈顶,在 js中基本数据类就是存储在栈中。 数组模拟就是给数组尾部添加元素,移除元素也是从数组尾部移除。

示例图

创建一个栈
function Stack(){
    /*通过数组来保存栈的元素*/
    let item=[];
};
给栈添加一些方法
  1. push 添加一个或几个元素到栈顶
  2. pop移除并返回栈顶的元素
  3. isEmpty 判断栈是不是空的
  4. clear 清空栈内的元素
  5. size返回栈内元素个数
  6. peek返回栈顶的元素
实现
function Stack() {
    // 通过数组保存栈的元素
    let item = [];
    this.push = function (val) {
        return item.push(val);
    };
    this.pop = function (val) {
        return item.pop(val);
    };
    this.isEmpty = function (val) {
        return item.length == 0;
    };
    this.clear = function () {
        item = [];
    };
    this.size = function () {
        return item.length;
    };
    this.peek = function () {
        return item[item.length - 1];
    };
    this.print = function () {
        for(let i=item.length-1;i>=0;i--){
            console.log(item[i]);
        };
    };
};

ES6版本

class Stack {
    item = [];
    constructor() {};
    push(val) {
        return this.item.push(val);
    };
    print() {
        for (let i = this.item.length - 1; i >= 0; i--) {
            console.log(this.item[i]);
        };
    };
    pop(val) {
        return this.item.pop(val);
    };
    isEmpty(val) {
        return this.item.length == 0;
    };
    clear() {
        this.item = [];
    };
    size() {
        return this.item.length;
    };
    peek() {
        return this.item[this.item.length - 1];
    };
};

demo 做一个10进制和其他进制的转换

/*有两个参数 第一个参数要转换的数字 第二个参数是要转换成的进制*/
function conversion(num, type) {
    while (num / type) {
        stack.push(num % type);
        // 确保每次计算后都是整数
        num = parseInt(num / type);
    };
    stack.print();
    // 处理完成后对栈进行清除
    stack.clear();
};