3-IFramework-优先级队列

  1. 优先级队列
    1. 1、快速优先级队列
    2. 2、泛型优先级队列
    3. 3、稳定优先级队列
    4. 4、简单优先级队列

优先级队列

A:请不要插队

B:我有VIP

A:前面全是SVIP在等

根据优先级自动排序的队列,消息模块就用到了这个队列来根据紧急程度排序

1、快速优先级队列

特点:

  • 优先级值低的排在队列前面
  • 相同优先级的节点元素的排序是随机的

使用示例:

//节点
public class FastNode : FastPriorityQueueNode
{
    public int value;
}

//创建优先级队列
FastPriorityQueue<FastNode> nodes = new FastPriorityQueue<FastNode>(10);

//节点元素入队
for (int i = 10; i > 0; i--)
{
    nodes.Enqueue(new FastNode() { value = i }, 10 - i);
}

//节点元素出队
while (nodes.count != 0)
{
    Log.L($"出队元素的值为:{nodes.Dequeue().value}");
}

2、泛型优先级队列

特点:

  • 优先级值使用可以对比值大小的泛型
  • 优先级值低的排在队列前面
  • 相同优先级的节点元素的排序是先进先出的

使用示例:

//节点
public class GenericNode : GenericPriorityQueueNode<char>
{
    public int value;
}

//创建队列,这里以char为例
GenericPriorityQueue<GenericNode, char> nodes = new GenericPriorityQueue<GenericNode, char>(10);
//节点元素入队
for (int i = 10; i > 0; i--)
{
    nodes.Enqueue(new GenericNode() { value = i }, Convert.ToChar(64 + i));
}

//节点元素出队
while (nodes.count != 0)
{
    Log.L($"出队元素的值为:{nodes.Dequeue().value}");
}

3、稳定优先级队列

特点:

  • 优先级值低的排在队列前面
  • 相同优先级的节点元素的排序是先进先出的

和快速优先级队列的区别就只在于出现相同优先级的判断……

4、简单优先级队列

特点:

  • 队列没有大小限制
  • 支持添加空节点元素和重复的节点元素
  • 优先级值低的排在队列前面
  • 相同优先级的节点元素的排序是先进先出的

使用示例:

//创建队列
SimplePriorityQueue<string> nodes = new SimplePriorityQueue<string>();

//节点元素入队
for (int i = 1; i <= 10; i++)
{
    nodes.Enqueue($"{i}", i);
}
//空节点元素和重复节点元素入队
string item = "重复值";
nodes.Enqueue(null, 1);
nodes.Enqueue(null, 3);
nodes.Enqueue(item, 4);
nodes.Enqueue(item, 5);

//节点元素出队
while (nodes.count != 0)
{
    Log.L($"出队元素的值为:{nodes.Dequeue()}");
}