zoukankan      html  css  js  c++  java
  • JavaScript 算法 1_1 下压堆栈 (链表实现)

    JavaScript 算法 1_1 下压堆栈 (链表实现)

    链表是一种递归的数据结构


    1. 节点结构

    node = {
    	ele: null,
        next: null,
    }
    

    这里使用了 ele 作为一个节点的元素内容, next 作为下个节点的索引


    2. 构造链表

    let next = {};
    Object.assign(next, {ele:null, next:null});
    next.ele = item;
    

    使用了 Object.assign 函数复制了节点结构


    3. 从表头插入和删除元素

     push(item){
        let oldFirst = this.first;
        let next = {};
        Object.assign(next, {ele: null, next: null});
        next.ele = item;
        this.first = next;
        this.first.next = oldFirst;
        this.count++;
      }
      pop(){
        let top = this.first.ele;
        this.first = this.first.next;
        this.count--;
        return top;
      }
    
    • 插入时先保存栈顶元素到 oldFirst, 后创建 next 节点, 置为栈顶
    • 删除时移除栈顶元素并返回

    4. 代码实现

    链表类

    // 类定义
    class Stack{
      constructor() {
        // 栈顶元素, 包括 next 和 ele
        this.first = null;
        this.count = 0;
      }
      isEmpty(){
        return this.count === 0;
      }
      size(){
        return this.count;
      }
      push(item){
        let oldFirst = this.first;
        let next = {};
        Object.assign(next, {ele: null, next: null});
        next.ele = item;
        this.first = next;
        this.first.next = oldFirst;
        this.count++;
      }
      pop(){
        let top = this.first.ele;
        this.first = this.first.next;
        this.count--;
        return top;
      }
      // 下回分解迭代器
      // [Symbol.iterator](){
      //
      // }
    }
    

    使用方式

    const stack = new Stack();
    
    // 可以使用任意类型放入
    stack.push(20);
    stack.push('小歪');
    stack.push([20, 30]);
    stack.push({name: '张三'});
    
    let pop = stack.pop();
    // pop: { name: '张三' } 
    pop = stack.pop();
    // [ 20, 30 ]
    pop = stack.pop();
    // 小歪
    pop = stack.pop();
    // 20
    console.log(stack);
    // Stack { first: null, count: 0 }
    

    代码可以按要求运行 √

  • 相关阅读:
    MySQL集群常见高可用方案(转)
    upsource使用
    Hystrix 使用
    astah UML 先画图、后编程
    java ThreadLocal 使用
    Java基础 Annotation使用
    LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置
    招聘求职学习
    Rotate List 面试题
    vue前台(四点二)
  • 原文地址:https://www.cnblogs.com/xiaxiangx/p/14276707.html
Copyright © 2011-2022 走看看