zoukankan      html  css  js  c++  java
  • 【数据结构第四周】树知识点整理(下)【堆】

    队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。

    1、堆的两个特性

    结构性:用数组表示的完全二叉树

    有序性:任一结点的关键字是其子树所有结点的最大值(或最小值)

    最大堆(MaxHeap)”,也称“大顶堆”:最大值 

    最小堆(MinHeap)”,也称“小顶堆” :最小值 

    2、

    typedef struct HeapStruct *MaxHeap; 
    struct HeapStruct {
    	ElementType *Elements; /* 存储堆元素的数组 */
    	int Size;/*堆的当前元素个数*/
    	int Capacity;/*堆的最大容量*/
    };
    
    MaxHeap Create( int MaxSize )
    {
        MaxHeap H = malloc( sizeof( struct HeapStruct ) );/* 创建容量为MaxSize的空的最大堆 */
        H->Elements = malloc( (MaxSize+1) * sizeof(ElementType)); 
        H->Size = 0;
        H->Capacity = MaxSize;
        H->Elements[0] = MaxData;
        /* 定义“哨兵”为大于堆中所有可能元素的值,便于以后更快操作 */ 
        return H;
    }
    

    3、将新增结点插入到从其父结点到根结点的有序序列中 

    /* 将元素item 插入最大堆H,其中H->Elements[0]已经定义为哨兵 */
    void Insert( MaxHeap H, ElementType item )
    { 
    	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 插入 */
    }
    

    4、删除最大堆中的最大值元素

    /* 从最大堆H中取出键值为最大的元素,并删除一个结点 */ 
    ElementType DeleteMax( MaxHeap 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;
    }
    

     

  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/acmsummer/p/4251726.html
Copyright © 2011-2022 走看看