zoukankan      html  css  js  c++  java
  • 栈与队列

    栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。
    实际上,栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。

    用数组实现的栈

    class Stack{
        constructor(){
            this.items = []
            this.count = 0
        }
    
        push(value){
            this.items.push(value)
            ++ this.count
            return this.items
        }
    
        pop(){
            if(this.count === 0)return []
            return this.items.pop()
        }
    
        print(){
            console.log(this.items.toString())
        }
    }
    var stack = new Stack();
    stack.push("Jack");
    stack.push("Mike");
    stack.push("Candy");
    stack.print(); // Jack,Mike,Candy
    stack.pop();
    stack.print(); // Jack,Mike
    

    不管基于数组还是链表,入栈、出栈的时间复杂度都为 O(1)

    队列

    队列最大的特点就是先进先出,主要的两个操作是入队和出队。跟栈一样,它既可以用数组来实现,也可以用链表来实现。用数组实现的叫顺序队列,用链表实现的叫链式队列。特别是长得像一个环的循环队列。在数组实现队列的时候,会有数据搬移操作,要想解决数据搬移的问题,我们就需要像环一样的循环队列。

    用数组实现队列

    class Queue{
        constructor(){
            this.items = []
        }
    
        enqueue(value){
            this.items.push(value)
        }
    
        dequeue(){
            return this.items.shift()
        }
    
        print(){
            console.log(this.items.toString())
        }
    }
    
    var queue = new Queue();
    queue.enqueue("Jack");
    queue.enqueue("Mike");
    queue.enqueue("Candy");
    queue.print(); // Jack,Mike,Candy
    queue.dequeue();
    queue.print(); // Mike,Candy
    
  • 相关阅读:
    vue集成百度UEditor富文本编辑器
    HTTPS访问站点,出现证书问题解决(转载) 规格严格
    JSSE 提供的 动态 debug 追踪模式 规格严格
    javax.net.debug 规格严格
    Oralce null 规格严格
    pipe 规格严格
    (总结)ibatis 动态传入表名和列名 规格严格
    垃圾回收算法简介 规格严格
    转载(正则表达式的分类) 规格严格
    长度为0的数组 规格严格
  • 原文地址:https://www.cnblogs.com/jesse131/p/12816778.html
Copyright © 2011-2022 走看看