首页 > 文章列表 > C/C++中的优先队列介绍

C/C++中的优先队列介绍

编程(programming) C语言(Clanguage) 优先队列(PriorityQueue)
106 2023-09-15

优先级队列是一种队列,其中根据分配给它们的优先级插入或删除元素,其中优先级是范围在 0-10 之间的整数值,其中 0 表示具有最高优先级的元素,10 表示具有最高优先级的元素优先级最低的元素。实现优先级队列遵循两条规则:

  • 具有最高优先级的数据或元素将在具有最低优先级的数据或元素之前执行。
  • 如果两个元素具有相同的优先级,则它们将按照它们添加到列表中的顺序执行。

有多种可用的数据结构可用于实现优先级队列如堆栈、队列和链表。在本文中,我们将解释队列数据结构。有两种方法可以用来实现优先级队列,例如 -

  • 在单个数组中维护多个优先级的队列

    一种方法实现优先级队列就是为每个优先级维护一个队列。我们可以将这些多个队列存储在一个数组中,其中每个队列都有两个指针,即 Front 和 Rear。在队列中,Front指针用于向队列中插入元素,每当插入元素时它就加1;另一个指针是rear指针,用于从队列中删除或移除元素,每当元素插入时它就减1被从队列中删除。最后,通过两个指针的位置我们还可以确定队列中元素的数量。

C/C++中的优先队列介绍

注意 - 如果每个队列的大小相同,那么我们可以创建一个二维数组,而不是创建多个一维数组维数组。

优先级队列插入操作算法

insert(queue, data, priority)
   If(queue->Rear[priority] = MAX-1 AND queue->Front[priority] = 0) OR (queue->Rear[priority] +1 =queue->Front[priority])
      Print Overflow
   End
   IF queue->Rear[priority - 1] = MAX-1
      Set queue->Rear[priority - 1] = 0
   Else
      Set queue->Rear[priority] = queue->Rear[priority - 1] +1
   End
      Set queue->CQueue[priority - 1] [queue->Rear[priority - 1] = data
   IF queue->Front[priority - 1] = -1
      Set queue->Front[priority - 1] = 0
End

优先级队列中插入操作的算法

delete(queue)
   Set flag = 0, priority = 0
      While priority <= MAX-1
         IF NOT queue->Front[priority] = -1
            Set flag = 1
            Set value = queue->CQueue[priority][queue->Front[priority]]
            IF queue->Front[priority] = queue->Rear[priority]
               Set queue->Front[priority] = queue->Rear[priority] = -1
            Else
            IF queue->Front[priority] = MAX-1
               Set queue->Front[priority] = 0
            Else
               Set queue->Front[priority] = queue->Front[priority] + 1
            End
         End
      Break
   End
   Set priority = priority +
End
If flag = 0
   Print underflow
Else
   Return value
End