zoukankan      html  css  js  c++  java
  • 优先队列的实现

    优先队列的声明

    #ifmdef _BinHeap_H
    
    struct HeapStruct;
    typedef struct HeapStruct *PriorityQueue;
    
    PriorityQueue Initialize(int MaxElement);
    void Destory(PriorityQueue H);
    void MakwEmpty(PriorityQueue H)
    void Insert(ElementType X,PriorityQueue H);
    ElementType DeleteMin(PriorityQueue H);
    ElementType FindMin(PriorityQueue H);
    int IsEmpty(PriorityQueue H);
    int IsFull(PriorityQueue H);
    
    #endif
    
    struct HeapStruct
    {
    	int Capacity;
    	int Size;
    	ElementType *Elements;
    }
    

    优先队列的初始化

    PriorityQueue Initialize(int MaxElements)
    {
    	PriorityQueue H;
    	if(MaxElement < 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;
    }
    

    插入一个元素到二叉树中

    void Insert(ElementType X,PriorityQueue H)
    {
    	int i;
    	if(IsFull(H))
    	{
    		Error("Priority queue is full");
    		return 0;
    	}
    	for(i = ++H->Size;H->Elements[i/2] > X;i /= 2)
    		H->Elements[i] = H->Elements[i/2];
    	H->Elements[i] = X;
    }
    

    在二叉树中执行DeleteMin函数

    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)
    	{
    		Child = i*2;
    		if(Child != H->Size && H->Elements[Child + 1] < H->Elements[Child])
    			Child ++;
    		if(LastElement > H->Elements[Child])
    			H->Elements[i] = H->Elements[Child];
    		else
    			break;
    	}
    	H->Elements[i] = LastElement;
    	return MinElement;
    }
  • 相关阅读:
    in exists
    oracle 12514文件解决
    oracle11g自动内存管理
    lvs为何不能完全替代DNS轮询
    druid安装
    macbook 安装win7
    GBT MBR
    python的文件操作
    zabbix简易安装指南
    zatree的安装
  • 原文地址:https://www.cnblogs.com/y3w3l/p/6369628.html
Copyright © 2011-2022 走看看