码迷,mamicode.com
首页 > 其他好文 > 详细

栈与队列

时间:2020-05-02 09:43:55      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:循环   int   数据结构   value   技术   enqueue   需要   最大   struct   

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

用数组实现的栈

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

栈与队列

标签:循环   int   数据结构   value   技术   enqueue   需要   最大   struct   

原文地址:https://www.cnblogs.com/jesse131/p/12816778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!