为什么优先级队列不能像普通队列那样环绕

为什么优先级队列不能像普通队列那样环绕

简介

队列是一种抽象的数据类型,它从后端插入元素并从前端删除。有三种类型的队列。简单队列、优先队列和循环队列。在本教程中,我们将了解为什么我们不能绕过优先级队列以及其原因。

优先级队列

它是一种独特的队列,不基于先进先出原则进行队列操作。是什么让它变得独特?就是它的元素在删除或去掉Queue时的优先级。优先级队列中的每个元素都有一定的优先级,它们根据这个优先级被删除。

具有最高优先级的元素首先从队列中被删除。当两个队列元素具有相同的优先级时,它们将根据先进先出原则被删除。

优先级队列是通过使用数组、链表、堆或二叉树来实现的。有两种类型的优先级队列:最小优先级队列和最大优先级队列

队列

数据结构中的普通队列类似于现实生活中的队列。它可以通过使用一个数组和一个链表来实现。对于数组队列的实现,你必须事先定义队列的大小,这就造成了内存的浪费。当使用数组来实现一个简单的队列时,后边的几个空格仍未使用。

包围:意义

为了克服普通队列中的内存浪费问题。一个队列通过在前端和后端之间形成一个循环来包装。由此产生的队列被称为循环队列。

通过包裹,如果你在达到队列的最大尺寸后插入一个元素,它将很容易被插入。

在环绕概念之前,队列在添加元素超过队列的最大尺寸时,会在Java中抛出一个异常。在多次插入和删除队列元素后,你会发现在某一点上,后端会低于前端。这是因为 “环绕”(Wrapping)。

为什么优先队列不能被环绕

使用具有环绕逻辑的优先级队列是可能的,但这将降低其性能。

最有效的优先级队列的实现是二叉树。二叉树对前端和后端包装没有任何影响。

优先级队列没有定义不同的队列操作,它的实现方式是使用数组、链表或二叉树。

包裹普通队列的结果是一个环形缓冲区,优先级队列可以用各种方式实现。

优先级队列除了使用环绕外还有其他各种功能,它同时定义了队列和堆栈。

总结

优先级队列是一个有序的队列,它以最高的优先级来删除其数据。有几种方法可以实现它,最常用的是二叉树。包围式实现是与普通队列一起使用的。

普通队列是没有排序的,它的元素按照先进先出的顺序被删除。它有两个端点。后端和前端。它被用于流量处理、CPU调度或管理播放列表。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册