为什么优先队列不能像普通队列那样循环?
Why can't a priority queue wrap around like an ordinary queue?
我知道为了提高效率,Queues use the wrap around method,为了避免我们删除一个元素的时候一直往下移动
但是我不明白为什么Priority Queues can't wrap around like ordinary Queues. In my point of view, Priority Queues have more similar behaviour to Stack不是要一个Queue,怎么可能?
最常见的优先级队列实现是 binary heap,它不会从回绕中获益。您可以创建一个在循环缓冲区中实现的优先级队列,但性能会受到影响。
重要的是要记住优先级队列是一种抽象数据结构。它定义了操作,但没有定义实现。您可以将优先级队列实现为二叉堆、排序数组、未排序数组、二叉树、跳表、链表等。实现优先级队列的方法有很多种。
另一方面,二叉堆是优先级队列抽象数据类型的具体实现。
关于栈和队列:实际上,栈和队列只是优先级队列的特化。如果把时间看成优先级,那么我们所说的队列(一种先进先出的数据结构),其实就是一个优先级队列,最老的项目优先级最高。堆栈(后进先出数据结构)是一个优先级队列,其中最新的项目具有最高优先级。
我知道为了提高效率,Queues use the wrap around method,为了避免我们删除一个元素的时候一直往下移动
但是我不明白为什么Priority Queues can't wrap around like ordinary Queues. In my point of view, Priority Queues have more similar behaviour to Stack不是要一个Queue,怎么可能?
最常见的优先级队列实现是 binary heap,它不会从回绕中获益。您可以创建一个在循环缓冲区中实现的优先级队列,但性能会受到影响。
重要的是要记住优先级队列是一种抽象数据结构。它定义了操作,但没有定义实现。您可以将优先级队列实现为二叉堆、排序数组、未排序数组、二叉树、跳表、链表等。实现优先级队列的方法有很多种。
另一方面,二叉堆是优先级队列抽象数据类型的具体实现。
关于栈和队列:实际上,栈和队列只是优先级队列的特化。如果把时间看成优先级,那么我们所说的队列(一种先进先出的数据结构),其实就是一个优先级队列,最老的项目优先级最高。堆栈(后进先出数据结构)是一个优先级队列,其中最新的项目具有最高优先级。