• MOOC 5.1 堆


    // 最大堆的操作
    // 最大堆的创建
    typedef struct HeapStruct *MaxHeap;
    struct HeapStruct {
    	ElementType *Elements;	// 存储堆元素的数组
    	int Size;		// 堆的当前元素个数 
    	int Capacity;	// 堆的最大容量 
    }; 
    
    MaxHeap Create(int MaxSize)
    {	/* 创建容量为MaxSize的空的最大堆 */
    	MaxHeap H = malloc(sizeof(struct HeapStruct));
    	H->Elements = malloc((MaxSize+1) * sizeof(ElementType));
    	H->Size = 0; 
    	H->Capacity = MaxSize;
    	H->Elements[0] = MaxData;
    		/* 定义"哨兵"为大于堆中所有可能元素的值, 便于以后更快的操作 */
    	return H; 
    }
    
    // 最大堆的插入
    void Insert(MaxHeap H, ElementType item)
    {	/* 将元素item插入最大堆H, 其中H->Elements[0]已经定义为哨兵 */ 
    	int i;
    	if(IsFull(H)) {
    		printf("最大堆已满");
    		return ; 
    	} 
    	i = ++H->Size;	/* i指向插入后堆中的最后一个元素的位置 */
    	for( ; H->Elements[i/2] < item; i /= 2)
    	{
    		H->Elements[i] = H->Elements[i/2];	// 向下过滤结点 
    	} 
    	H->Elements[i] = item;	/* 将item插入 */ 
    }
    
    ElementType DeleteMax(MaxHeap H)
    {	/* 从最大堆H中取出键值为最大的元素, 并删除一个结点 */ 
    	int Parent, Child;
    	ElementType MaxItem, temp;
    	if(IsEmpty(H)) {
    		printf("最大堆已为空");
    		return ; 
    	}
    	MaxItem = H->Elements[1];	// 取出根节点最大值
    	/* 用最大堆中最后一个元素从根节点开始向上过滤下层结点 */
    	temp = H->Elements[H->Size--];
    	for(Parent = 1; Parent*2 <= H->Size; Parent = Child)
    	{
    		Child = Parent * 2;
    		if((Child != H->Size) &&
    			(H->Elements[Child] < H->Elements[Child+1]) ) 
    			Child ++;	/* Child指向左右子节点的较大者 */ 
    		if(temp >= H->Elements[Child])	break;
    		else /* 移动temp元素到下一层 */ 
    			H->Elements[Parent] = H->Elements[Child];
    	} 
    	H->Elements[Parent] = temp;
    	return MaxItem;
    }
    

      

  • 相关阅读:
    python time库
    python urllib.request
    python random库
    python3中post请求 json 数据
    python3 中post处理json 数据
    python3中post和get请求处理
    ThinVnc-身份验证绕过(CVE-2019-17662)
    python3 获取博彩网站页面下所有域名(批量)
    Apache Solr Velocity模板注入RCE漏洞复现
    宽字节注入和防御
  • 原文地址:https://www.cnblogs.com/mjn1/p/11530263.html
Copyright © 2020-2023  润新知