美文网首页
栈和队列的前端代码实现

栈和队列的前端代码实现

作者: 无敌老夫子 | 来源:发表于2020-05-28 11:59 被阅读0次

    栈和队列都属于线性表数据结构,所以可以利用数组类型来完成代码实现

    1、栈数据结构的特点:先进后出,后进先出,进出栈的位置被称为栈顶, stack.png

    栈的代码实现包含三个操作函数入栈、出栈、获取栈的大小

    class Stack {
      constructor() {
        this.list = [];
        this.length = 0;
      }
      push (value) {// 入栈
        this.list.push(value);
        this.length += 1;
      }
      pop () { // 出栈
        if (this.length > 0) {
          this.list.pop();
          this.length -= 1;
        }
      }
      peek() { // 栈顶元素
        if (this.length > 0) {
          return this.list[this.length - 1];
        }
        return null;
      }
      size () { //栈的大小
        return this.length;
      }
      print () {
        console.log('栈内元素:', this.list.join());
      }
    }
    
    const stack = new Stack();
    // 入栈
    stack.push(1);
    console.log('栈的大小:', stack.size());
    stack.print();
    console.log('----------');
    // 入栈
    stack.push(2);
    console.log('栈的大小:', stack.size());
    stack.print();
    console.log('----------');
    // 入栈
    stack.push(3);
    console.log('栈的大小:', stack.size());
    stack.print();
    console.log('----------');
    // 出栈
    stack.pop();
    console.log('栈的大小:', stack.size());
    stack.print();
    
    执行结果:
    栈的大小: 1
    栈内元素: 1
    ----------
    栈的大小: 2
    栈内元素: 1,2
    ----------
    栈的大小: 3
    栈内元素: 1,2,3
    ----------
    栈的大小: 2
    栈内元素: 1,2
    

    栈的使用场景:浏览器的前进和后退,打开A页面,打开B页面,打开C页面,后退到B页面, 后退到A页面, 前进到页面B, 打开D页面

    const history = new Stack();
    // 用来存储前进的页面
    const nextList = new Stack();
    // 打开A页面
    history.push('A');
    // 打开B页面
    history.push('B');
    // 打开C页面
    history.push('C');
    // 后退到B页面
    const C = history.peek();
    history.pop();
    nextList.push(C);
    console.log('history:', history);
    // 后退到A页面
    const B = history.peek();
    history.pop();
    nextList.push(B);
    console.log('history:', history);
    // 前进到页面B
    const next = nextList.peek();
    history.push(next);
    nextList.pop();
    console.log('history:', history);
    // 打开D页面
    history.push('D');
    nextList.clear();
    console.log('history:', history);
    
    // ##执行结果:
    // 打开A页面
    history: Stack { list: [ 'A' ], length: 1 }
    // 打开B页面
    history: Stack { list: [ 'A', 'B' ], length: 2 }
    // 打开C页面
    history: Stack { list: [ 'A', 'B', 'C' ], length: 3 }
    // 后退到B页面
    history: Stack { list: [ 'A', 'B' ], length: 2 }
    nextList: Stack { list: [ 'C' ], length: 1 }
    // 后退到A页面
    history: Stack { list: [ 'A' ], length: 1 }
    nextList: Stack { list: [ 'C', 'B' ], length: 2 }
    // 前进到页面B
    history: Stack { list: [ 'A', 'B' ], length: 2 }
    nextList: Stack { list: [ 'C' ], length: 1 }
    // 打开D页面
    history: Stack { list: [ 'A', 'B', 'D' ], length: 3 }
    nextList: Stack { list: [], length: 0 }
    

    相关文章

      网友评论

          本文标题:栈和队列的前端代码实现

          本文链接:https://www.haomeiwen.com/subject/ivboahtx.html