zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    解决方案 git@github.com出现Permission denied (publickey)
    github设置添加SSH
    base64是啥原理
    PHP面试题:HTTP中POST、GET、PUT、DELETE方式的区别
    PHP中put和post区别
    常用的微信编辑器
    局域网内一台电脑的ip地址自己会变,怎样让它不变
    Trendalyzer is an information visualization software
    FineReport报表和水晶报表的比较
    x
  • 原文地址:https://www.cnblogs.com/mjn1/p/11530263.html
Copyright © 2011-2022 走看看