为什么优先队列不能像普通队列那样循环?
介绍
队列是一种抽象数据类型,它从后端插入元素,从前端移除元素。队列有三种类型:简单队列、优先队列和循环队列。在本教程中,我们将了解为什么优先队列不能循环以及原因。
优先队列
这是一种独特的队列,它不基于队列操作的FIFO原则。是什么让它独一无二?它是元素的优先级,用于移除或出队。优先队列的每个元素都有一定的优先级,它们根据优先级被移除。
优先级最高的元素首先从队列中移除。当两个队列元素具有相同的优先级时,它们将按照FIFO原则移除。
优先队列是使用数组、链表、堆或二叉树实现的。优先队列有两种类型:最小优先队列和最大优先队列。
队列
数据结构中的普通队列类似于现实生活中的队列。它可以使用数组和链表实现。对于数组队列的实现,您必须预先定义队列的大小,这会导致内存浪费。当使用数组实现简单队列时,尾端之前的一些空间将保持未使用。
循环:含义
为了克服普通队列中内存浪费的问题。通过在前端和尾端之间形成循环来包装队列。生成的队列称为循环队列。
通过循环,如果在达到队列的最大大小后插入元素,它将很容易插入。
在循环概念之前,在达到最大队列大小后添加元素时,Java中的队列将抛出异常。在多次插入和删除队列元素后,你会发现,在某一点上,尾端将在前端下方。这是因为循环。
为什么优先队列不能循环?
可以使用带有循环逻辑的优先队列,但这会降低其性能。
优先队列最有效的实现是二叉树。二叉树对前端和尾端的循环没有影响。
优先队列没有定义不同的队列操作,它用于使用数组、链表或二叉树的实现。
普通队列的循环会产生环形缓冲区,而优先队列可以通过多种方式实现。
优先队列具有比循环更多的其他功能,它定义了队列和堆栈。
结论
优先队列是一个有序队列,它移除优先级最高的數據。有多种实现方法,最常用的是二叉树。循环实现用于普通队列。
普通队列是无序的,其元素按照FIFO顺序移除。它有两个端点:尾端和前端。它用于流量处理、CPU调度或管理播放列表。