为什么优先级队列不能像普通队列那样环绕
简介
队列是一种抽象的数据类型,它从后端插入元素并从前端删除。有三种类型的队列。简单队列、优先队列和循环队列。在本教程中,我们将了解为什么我们不能绕过优先级队列以及其原因。
优先级队列
它是一种独特的队列,不基于先进先出原则进行队列操作。是什么让它变得独特?就是它的元素在删除或去掉Queue时的优先级。优先级队列中的每个元素都有一定的优先级,它们根据这个优先级被删除。
具有最高优先级的元素首先从队列中被删除。当两个队列元素具有相同的优先级时,它们将根据先进先出原则被删除。
优先级队列是通过使用数组、链表、堆或二叉树来实现的。有两种类型的优先级队列:最小优先级队列和最大优先级队列
队列
数据结构中的普通队列类似于现实生活中的队列。它可以通过使用一个数组和一个链表来实现。对于数组队列的实现,你必须事先定义队列的大小,这就造成了内存的浪费。当使用数组来实现一个简单的队列时,后边的几个空格仍未使用。
包围:意义
为了克服普通队列中的内存浪费问题。一个队列通过在前端和后端之间形成一个循环来包装。由此产生的队列被称为循环队列。
通过包裹,如果你在达到队列的最大尺寸后插入一个元素,它将很容易被插入。
在环绕概念之前,队列在添加元素超过队列的最大尺寸时,会在Java中抛出一个异常。在多次插入和删除队列元素后,你会发现在某一点上,后端会低于前端。这是因为 “环绕”(Wrapping)。
为什么优先队列不能被环绕
使用具有环绕逻辑的优先级队列是可能的,但这将降低其性能。
最有效的优先级队列的实现是二叉树。二叉树对前端和后端包装没有任何影响。
优先级队列没有定义不同的队列操作,它的实现方式是使用数组、链表或二叉树。
包裹普通队列的结果是一个环形缓冲区,优先级队列可以用各种方式实现。
优先级队列除了使用环绕外还有其他各种功能,它同时定义了队列和堆栈。
总结
优先级队列是一个有序的队列,它以最高的优先级来删除其数据。有几种方法可以实现它,最常用的是二叉树。包围式实现是与普通队列一起使用的。
普通队列是没有排序的,它的元素按照先进先出的顺序被删除。它有两个端点。后端和前端。它被用于流量处理、CPU调度或管理播放列表。