力扣篇章——队列和栈

前往力扣
说在前面——虽然有了数组但是当我们想要限制数据处理的顺序时,我们就可以使用队列和栈。(其实队列和栈就是链表和数组的使用

队列(FIFO)

    队列就是一个先进先出的序列,即first input first output(你可以想象成生活中的排队现象)。可以使用链表构成队列,也可以使用数组构成队列。

在这里插入图片描述
注:图片来自于leetcode

队列的声明
  1. Queue<Object> name=new LinkedList<Object>();//没用实现堵塞的队列
  2. 实现堵塞的队列有五种
    BlockingQueue<Object> name=new ArrayBlockingQueue<Object>();//由数组支持的有界队列
    BlockingQueue<Object> name=new LinkedBlockingQueue<Object>();//由链表支持的可选有界队列
    BlockingQueue<Object> name=new PriorityBlockingQueue<Object>();//由优先级堆支持的无界队列
    BlockingQueue<Object> name=new DelayQueue<Object>();//由优先级堆支持的,基于时间的调度队列
    BlockingQueue<Object> name=new SynchronousQueue<Object>();//一个利用BlockingQueue接口的简单聚合机制的队列
    点击查看原文——java队列——queue详细分析
队列的相关操作
  1. 入队——add(object),offer(object)从队尾入队(两者区别前者当队列的容量不够时返回异常,后者返回false)。
  2. 出队——remove(),poll()从队首出队(两者区别当队列为空时前者返回异常,后者返回false)。
  3. 获得队首元素值——element(),peek()(两者区别当队列为空时前者返回抛出异常后者返回false)
  4. 查询是否为空——isEmpty()。
关于队列所需掌握的知识
  1. 自己建立一个队列——使用数组(ArrayList)和链表。
  2. 熟悉系统提供的队列的相关函数的用法。
  3. 设计一个循环队列——同样你可以尝试使用数组和链表两种方法来实现。
  4. 使用队列实现BFS(Breadth First Search——广度优先搜索)。

栈(LIFO)

栈就是一个后进先出的序列(Last in,First out),你也可以想象成一筒 薯片(对就是薯片——ps:我没有饿)当你想其中加入薯片时是放在最上面,当你吃时你也是优先吃最上面的。对于栈的实现同样可以使用数组和链表两种方式。(在java中栈Stack继承于Vector,并且其实现是基于数组的)

图片来自于力扣

注:图片来自于leetcode

栈的声明

Stack<Object> name=new Stack<Object>();

栈的相关操作
  1. 入栈——push()向栈顶加入元素(加入薯片)。
  2. 出栈——pop()从栈顶中删除元素并返回元素值(吃掉薯片)——如果栈为空抛出异常。
  3. 获得栈顶元素——peek()查看栈顶元素。
  4. 栈顶是否为空——isEmpty()查看栈是否为空,返回值是boolean类型。
  5. 搜索元素所在位置——search(object),返回元素object离栈顶的距离,如果元素不存在则返回-1。

BFS(广度优先搜索)

用途:遍历和搜索数据结构的算法。(主要用于寻找节点之间的最短路径)
是一种图形搜索算法,广度优先搜索顾名思义就是优先在广度上进行搜索,以一颗树为例,广度优先搜索是从顶层一层一层的向下搜索。
使用方式:通常和队列结合使用。

DFS(深度优先搜索)

用途:同广度优先搜索类似,一般用与树、图的遍历和搜索算法。(主要用于遍历)
同样是一种图形搜索算法,以一颗树为例深度优先搜索是以深度为主,沿着一条路径走到树的低端然后再走另一条路径。
使用方式:通常和栈结合使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值