zoukankan      html  css  js  c++  java
  • JS链表实现栈和队列

    1. 栈

    top指针记录栈顶元素,插入和删除都是对top操作

    function Node(val) {
        this.val = val;
        this.next = null;
    }
    function Stack() {
        this.top = null;
        this.length = 0;
    }
    /* 入栈 */
    Stack.prototype.push = function (node) {
        if (!this.top) {
            this.top = node;
            this.length++;
        } else {
            node.next = this.top;
            this.top = node;
            this.length++;
        }
    }
    /* 出栈 */
    Stack.prototype.pop = function () {
        let res = this.top || undefined;
        // 删除栈顶
        if (this.top) {
            this.top = this.top.next;
            this.length--;
        }
        return res;
    }
    
    let stack = new Stack();
    stack.push(new Node(1));
    stack.push(new Node(2));
    stack.pop();
    console.log(JSON.stringify(stack, null, '   '));
    stack.pop();
    console.log(JSON.stringify(stack, null, '   '));
    

    2. 队列

    /* 队列 */
    function Node(val) {
        this.val = val;
        this.next = null;
    }
    function Queue() {
        this.front = null;
        this.tail = null;
        this.length = 0;
    }
    /* 插入 */
    Queue.prototype.insert = function (node) {
        if (!this.front) {
            this.front = this.tail = node;
        } else {
            /* 新插入元素放到尾部 */
            this.tail.next = node;
            this.tail = node;
        }
        this.length++;
    }
    /* 弹出 */
    Queue.prototype.pop = function () {
        if (!this.length)
            return -1;
        /* 从头部删除 */
        let res = this.front;
        this.front = this.front.next;
        this.length--;
        /* 删除完毕将尾部删除 */
        if (!this.length)
            this.tail = null;
        return res;
    }
    
    let queue = new Queue();
    queue.insert(new Node(1));
    queue.insert(new Node(2));
    queue.pop();
    console.log(JSON.stringify(queue, null, '   '));
    queue.pop();
    console.log(JSON.stringify(queue, null, '   '));
    
  • 相关阅读:
    RPC 接口必须是业务职责
    一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践
    t
    hessian-serialization
    服务拆分 服务设计
    灰度架构设计方案
    有赞发号器多机房方案
    解析MySQL中存储时间日期类型的选择问题
    t
    在阿里,我如何做好技术项目管理?
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/13340906.html
Copyright © 2011-2022 走看看