栈和队列


栈 先入后出

队列 先进先出

vector 想象成一个ArrayList,区别就是vector是线程安全的

Stack & Queue 关键点

  • Stack:先入先出;添加、删除皆为O(1) FILO stack是class

  • Queue:先入先出;添加、删除皆为O(1) Queue是interface

    查询是O(n) 元素是无序的,必须遍历

Deque:Double-End Queue双端队列 [dek]

  1. 简单理解:两端可以进出的Queue Double-End Queue
  2. 插入和删除都是O(1)

stack 用数组来模拟

看java代码里面关于Stack、Queue、Deque的工程实现

Stack methods

Queue methods

Interface Deque Deque是一个接口

methods

示例代码 - Stack

Stack stack = new Stack<>();
stack.push(1);

作业:

push可以用addFirst等等之类的改写

考得多的 Priority Queue 优先队列

  1. 插入操作:O(1)

  2. 取出操作:O(logN) - 按照元素的优先级取出

  3. 底层具体实现的数据结构较为多样和复杂:heap堆、bst(Binary Search Tree)二叉搜索树、treap

  4. Priority Queue也是一个接口,底层可以用许多东西来实现