• 【数据结构】堆的删除


    题目

    实现在最小堆中删除给定序号为pos的元素,并由x返回,删除成功返回true,失败返回false。(注意:删除后要保持数据结构是最小堆。)

    算法实现

    在最小堆中删除给定序号为pos的元素,我们可以先删除该元素后将堆中最后一个元素补到该位子,然后向下调整为堆,在从该位置向上调整为堆。
    1 如果堆空返回false
    2 x = heap[pos]; // 返回元素
    3 heap[pos] = heap[currentSize - 1]; //最后元素填补到pos结点
    4 currentSize--;
    5 siftDown(pos, currentSize - 1);//自上向下调整为堆
    6 siftUp(pos); //向上调整为堆
    时间复杂度为O(logn)

    代码

    template <class E>bool MinHeap <E>::Remove(int &pos,E &x) 
    {
    	if (!currentSize) {	//堆空, 返回false	
    		cout << "Heap empty" << endl;
    		return false;
    	}
    	x = heap[pos];		// 返回该元素
    	heap[pos] = heap[currentSize - 1];	//最后元素填补到pos结点
    	currentSize--;
    	siftDown(pos, currentSize - 1);//自上向下调整为堆
    	siftUp(pos);
    	return true;
    }
    
  • 相关阅读:
    linux 学习笔记1
    IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
    ipod锁定后的恢复
    HTTP报文
    数据仓库概念
    数据挖掘概念
    大数据处理工具
    eclipse 4.3 汉化
    在CentOS中安装输入法
    编译Hadoop1.1.2eclipse插件并测试
  • 原文地址:https://www.cnblogs.com/muyefeiwu/p/11838600.html
Copyright © 2020-2023  润新知