2. 队列

作者: Shimmer_ | 来源:发表于2021-05-04 22:31 被阅读0次

[TOC]

队列-Queue

又叫先进先出表;先进先出结构、只允许在一端进行插入操作、而在另一端进行删除操作的线性表。
插入数据的一端是队尾,取数据的一端则是队头

Queue接口主要方法

  • boolean add(E e);:增加
  • boolean offer(E e);:增加,不会抛IllegalStateException异常(队列满,无法添加)而是返回false
  • E remove();:移除
  • E poll();:移除,调用空队列时不会抛异常NoSuchElementException,而是返回null
  • E element();:取队头数据但不移除
  • E peek();:取队头数据但不移除 调用空队列时不会抛异常NoSuchElementException,而是返回null

顺序存储队列

普通队列

数组实现,空队列时,队头、队尾下标均为0,添加元素时,队尾向后移动一位,移除元素时,队头向后移动一位。因为下标一直在往后移动,所以之前释放的元素位置无法再被利用,这样就导致了假溢出现象(无法添加,但队列并不是满的)

循环队列

队列的头尾相接的顺序存储结构。用于解决假溢出现象。

假设循环队列总容量为N,预留一个空的位置(rear永远指向为空的位置),front为头节点下标,rear为尾节点下标

  • 队列空:front==rear;
  • 队列满:(rear+1)%N==front;
  • 队列元素个数:(rear – front + N)%N 若rear能存放数据:rear>front时:(rear-front)%N+1 rear<front: (rear-front+N)%N+1
  • 移除:front = (front+1)%N
  • 增加:rear =(rear+1)%N

链式存储队列

其实就是线性表的单链表 ,只不过只能尾进头出

双端队列 Deque

Deque:是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行

  • LinkedList
  • ArrayDeque
    用数组实现执行效率高
  • linkedBlockingDeque

优先级队列

优先级队列和通常的栈和队列一样,只不过里面的每一个元素都有一个”优先级”,在处理的时候,首先处理优先级最高的。如果两个元素具有相同的优先级,则按照他们插入到队列中的先后顺序处理。

  • MessageQueue:消息执行时间越早,插入位置越前

  • PriorityQueue:重要程度排序

相关算法题

  • 手写实现双端队列
  • 优先级队列完成CPU调度

相关文章

  • 2. 队列

    [TOC] 队列-Queue 又叫先进先出表;先进先出结构、只允许在一端进行插入操作、而在另一端进行删除操作的线性...

  • 2.队列

    举个例子:饭堂打饭,后来的人只能站到队尾,前面的人走了之后,后面的人补上, 介绍 队列是一个方向进一个方向出的数据...

  • 2. 队列

    1. 队列简介(先进先出) 队列是一个先进先出的数据结构; JS 中没有队列,但是可以用 Array 实现栈中的所...

  • 6.队列Queue

    目录:1.队列的定义2.队列的图解3.队列定义操作4.队列的实现 1.队列的定义 2.队列的图解 3.队列定义操作...

  • iOS - GCD队列、任务组合

    1. 单个队列 2. 队列嵌套

  • 7.双端队列Deque

    目录:1.双端队列的定义2.双端队列的图解3.双端队列定义操作4.双端队列的实现 1.双端队列的定义 2.双端队列...

  • iOS - 线程、队列

    线程: 1.异步线程全局队列 2.主线程 队列 1.串行队列

  • iOS多线程整理 (精)

    知识点梳理 1.线程进程的区别: 2.队列种类: 串行队列、并发队列、主队列(有经过特殊处理的串行队列)、全局队列...

  • 爬虫 ----队列、多线程

    1.队列 使用Queue 队列的重点:常规队列操作[LILO队列] 队列的特点:线程安全的! 2.多进程 用Que...

  • iOS多线程--GCD

    队列:串行队列,并发队列,全局队列,主队列。 2.执行的方法有:同步执行和异步执行。 多线程,四种,pthread...

网友评论

    本文标题:2. 队列

    本文链接:https://www.haomeiwen.com/subject/remhdltx.html