优先队列(缺)

简介: #include typedef int ElementType;struct HeapStruct;typedef struct HeapStruct *PriorityQueue;PriorityQueue ...
#include <stdio.h>
typedef int ElementType;

struct HeapStruct;
typedef struct HeapStruct *PriorityQueue;

PriorityQueue Initialize( int MaxElements );
void Destroy( PriorityQueue H );
void MakeEmpty( PriorityQueue H );
void Insert( ElementType X, PriorityQueue H );
ElementType DeleteMin( PriorityQueue H );
ElementType FindMin( PriorityQueue H);
int IsEmpty( PriorityQueue H );
int IsFull( PriorityQueue H );

struct HeapStruct
{
    int Capacity;
    int Size;
    ElementType *Elements;
};


int main()
{
    return 0;
}

PriorityQueue
Initialize( int MaxElements)
{
    PriorityQueue H;

    if( MaxElements < MinPQSize )
        Error( "Priority queue size is too small");

    H = malloc( sizeof( struct HeapStruct ) );
    if( H == NULL )
        FatalError( "Out of space!!!");

    H->Elements = malloc( ( MaxElements + 1 )
                            * sizeof( ElementType) );

    if( H->Elements == NULL )
        FatalError( "Out of space!!!");

    H->Capacity = MaxElements;
    H->Size = 0;
    H->Elements[ 0 ] = MinData;

    return H;
}

/* H->Element [0] is a sentinel 哨兵*/
void 
Insert(ElementType X, PriorityQueue H)
{
    int i;

    if( IsFull( H ) )
    {
        Error("Priority queue is full");
        return;
    }

    for( i = ++H->Size; H->Elements[ i / 2] > X; i /=2 )
        H->Elements[ i ] = H->Elements[ i / 2];
    H->Elements[ i ] = X;
}

ElementType
DeleteMin( PriorityQueue H)
{
    int i, child;
    ElementType MinElement, LastElement;

    if( IsEmpty( H ))
    {
        Error( "Priority queue is empty ");
        return H->Elements[ 0 ];
    }
    MinElement = H->Elements[ 1 ];
    LastElement = H->Elements[ H->Size-- ];

    for( i = 1; i * 2 <= H->Size; i = Child)
    {
        /* Find smaller child*/
        Child = i * 2;
        if(Child != H->Size && H->Elements[ Child + 1 ]
                            < H->Capacity[ Child])
            Child++;

        if( LastElement > H->Elements[ Child ])
            H->Elements[ i ] = H->Elements[ Child ];
        else
            break;
    }
    H->Elements[ i ] = LastElement;
    return MinElement;
}





目录
相关文章
|
算法
建筑抢修 (大根堆+贪心+优先队列+快速排序+2重思想比较)
建筑抢修 (大根堆+贪心+优先队列+快速排序+2重思想比较)
43 0
|
8天前
手撸优先队列——二叉堆
队列在生活中常见,如买早点排队。但有时需要优先处理某些元素,如老幼病残孕优先上车,或打印机优先处理单页请求。这种情况下,使用优先队列更为合理。优先队列的基本操作包括入队和出队,常见的实现方法是二叉堆。二叉堆是一种完全二叉树,可以用数组表示,支持高效插入和删除操作。插入时使用上滤,删除时使用下滤,确保堆序性质。构建二叉堆时,从倒数第二层节点开始下滤,直至根节点。
15 3
|
6月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
6月前
|
人工智能
牛客xiao白月赛39 D(线段树维护区间)
牛客xiao白月赛39 D(线段树维护区间)
34 0
|
C语言
[链表OJ题 8] 用栈实现队列,没想到你小子的基础这么好,这么快就做对了
[链表OJ题 8] 用栈实现队列,没想到你小子的基础这么好,这么快就做对了
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(下)
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(下)
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(下)
|
搜索推荐
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)2
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)2
|
搜索推荐
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)1
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)1
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(上)
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?
leetcode-每日一题899. 有序队列(思维题)
当k = 1时,我们每次取 i 个首字符并将其移动到字符串末尾,对比找最小的字典序字符串即可
79 0
leetcode-每日一题899. 有序队列(思维题)