16 - 堆栈 - 优先级队列

前面我们学习了小顶堆,大顶堆,今天我们来看看它的应用,小顶堆最顶端的元素一定是最小的,大顶堆对顶端的元素一定是最大的,所以我们可以利用这个特性,来设计一个优先级队列,这个队列每次出队是优先级最大的元素。

优先级队列

与普通队列先进先出相比,优先队列有一个优先级权重,每次出队列的是优先级最高的元素!

优先级队列的实现

优先队列往往使用堆来实现!

下面就来看看优先级队列的C语言实现:

#include 
#include 
#include 

#define MaxSize  10

//定义队列元素结构体 

typedef struct
{
    int  priority;  //定义队列元素优先级
    int  data; //数据
}ElemType;

//定义队列结构
typedef struct
{
    ElemType Queue[MaxSize];
    int size;
}PriorityQueue; 


//交换数组中两个元素
void swap(ElemType* arr, int i, int m)
{
    ElemType temp = arr[i];
    arr[i] = arr[m];
    arr[m] = temp;
}

void heapify(ElemType* a, int k, int index)
{
    int min = index;

    while (1)
    {
        if (index * 2 + 1 < k && a[index * 2 + 1].priority < a[index].priorit

你可能感兴趣的:(Windows,Linux,C/C++,高级编程,算法/数据结构,C语言高手编程修炼营,算法,链表,数据结构,栈,排序算法,堆)