`
宫庆义
  • 浏览: 17315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据结构学习----最小堆实现

阅读更多
#ifndef HEAP
#define HEAP
template<class T>
class Heap
{
private:
	T *data;
	int size;
    int maxSize;
	void Sink(int start,int m);       //从start到m下滑调整成最小堆
	void Raise(int start);            //从start到0上滑调整成最小堆
public: 
	Heap(){data=new T[100]; maxSize=100; size=0;}
	Heap(int _maxSize);
	Heap(T arr[],int length);
	~Heap(){delete []data;}
	void Push(T x);
	T PopMin();
	bool IsEmpty(){return size==0?true:false;}
	int  Size(){return size;}
	void Clear(){size=0;}
    void Out();
};
#endif

template<class T>
void Heap<T>::Sink(int start, int m)
{
	int i,j;
	T temp=data[start];
	for(i=start,j=2*i+1; j<=m; i=j,j=2*j+1)
	{
		if(j<m&&data[j]>data[j+1]) j++;
		if(temp<data[j]) 
			break;
		else 
			data[i]=data[j];
	}
	data[i]=temp;
}

template<class T>
void Heap<T>::Raise(int start)
{
    int i,j;
	T temp=data[start];
	for(j=start,i=(j-1)/2; j>0; j=i,i=(i-1)/2)
		if(data[i]<temp) 
			break;
		else 
			data[j]=data[i];
	data[j]=temp;
}

template<class T>
Heap<T>::Heap(int _maxSize)
{ 
	maxSize=_maxSiz>=100?_maxSiz:100;
	data=new T[maxSize];
	size=0;
	if(data==NULL)
	  Error("堆建立失败");
}

template<class T>
Heap<T>::Heap(T arr[], int length)
{
	maxSize=length;
	data=new T[mmaxSize];
	for(int i=0;i<n;i+)
	{
		data[i]=arr[i];
		size++;
	}
	int current=size/2-1;
	while(current>=0)
	{
		Sink(current,size-1);
		current--;
	}
}

template<class T>
void Heap<T>::Push(T x)
{
	if(size>=maxSize)
		return;
	data[size]=x;
	Raise(size);
	size++;
}

template<class T>
T Heap<T>::PopMin()
{
	if(size==0)
		Error("弹出数据错误!");
	T x;
	x=data[0];
	data[0]=data[size-1];
	size--;
	Sink(0,size-1);
    return x;
}

template<class T>
void Heap<T>::Out()
{
	for(int i=0;i<size;i++)
	{
		cout<<data[i]<<",";
	}
}
0
0
分享到:
评论

相关推荐

    数据结构--严蔚敏--实现程序

    《数据结构--严蔚敏》是一本经典的教材,由著名计算机科学家严蔚敏教授编写,对于学习者来说,它是理解和掌握数据结构的宝贵资源。这本书深入浅出地讲解了各种数据结构的理论基础和实现方法,涵盖了数组、链表、栈、...

    北大信息院数据结构--张铭

    7. **排序与查找**:排序算法(如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等)和查找算法(如顺序查找、二分查找、哈希查找)是数据结构的重要组成部分,它们对算法性能有显著影响。 8. **动态...

    数据结构-----------课件

    学习数据结构不仅可以提升编程技能,还能培养解决问题的逻辑思维,对软件开发、数据库设计和算法分析等领域至关重要。通过深入学习这些课件,你将能够更好地掌握数据结构的本质,并在实际项目中灵活运用。

    数据结构课程设计----最小生成树

    在数据结构课程设计中,构建最小生成树是学习图算法的重要实践环节。本项目包含完整的工程文件和文档,提供了从理论到实现的全面学习体验。 首先,我们要理解最小生成树的定义:在一个加权无向图中,找到一棵包括...

    数据结构资料---课本

    6. **堆**:一种部分有序的树形数据结构,常用于优先队列的实现,如最小堆和最大堆。 7. **堆排序、快速排序、归并排序**等排序算法,它们的不同特性使得在处理大量数据时能选择最合适的方法。 8. **动态规划**和*...

    java数据结构--学习

    本学习资料包"java数据结构--学习"聚焦于如何在Java环境下理解和应用各种数据结构,旨在提升开发者的技术水平,使其能够编写出更加高效和优化的代码。 1. **数组**:数组是最基本的数据结构,用于存储同类型元素的...

    数据结构c++-源代码

    8. **堆**:堆是一种特殊的树形数据结构,满足堆属性(最大堆或最小堆)。C++标准库中的`std::priority_queue`是基于堆实现的。 9. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,...

    数据结构课程设计-最小生成树

    数据结构课程设计报告——最小生成树 最小生成树是图论中的一个重要概念,它涉及到如何在给定的连通图中找到一棵边的集合,使得这些边连接了图中的所有顶点,且总权重最小。这个任务在各种工程优化问题中都有应用,...

    数据结构教程-英文原版

    这本书深入浅出地讲解了如何在Java编程环境中理解和实现各种核心数据结构和算法,是提升编程技能和解决实际问题的重要参考书籍。 1. 数据结构: 数据结构是组织和存储数据的方式,它直接影响到算法的效率和程序的...

    数据结构实验:最小最大堆的构建

    最小最大堆是一种特殊的二叉堆数据结构,它同时满足最小堆和最大堆的特性。在最小最大堆中,根节点是所有元素中的最小值,而每个子树中又包含一个最大值。这样的设计使得在处理某些特定问题时,如查找最小和最大元素...

    数据结构----清华殷人昆数据结构笔记(C++版,ppt格式)

    7. **堆**:堆是一种特殊的树形数据结构,满足堆性质(最大堆或最小堆)。堆常用于实现优先队列,并在排序算法(如堆排序)中有重要作用。 8. **散列表(哈希表)**:散列表通过哈希函数将数据映射到固定大小的数组...

    数据结构--图的常见算法实现

    - Prim算法:基于优先队列(最小堆),每次添加一条连接已选顶点和未选顶点的最小权重边。 五、其他图算法 1. 拓扑排序的应用:任务调度、编译器中的控制流分析等。 2. 最短路径的应用:路由选择、推荐系统、网络...

    基于python的数据结构代码实现-堆Heap

    在这个基于Python的数据结构实现中,我们将深入探讨堆的概念、用途以及如何用Python来实现。 堆是一个完全二叉树,其中每个父节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。这种特性使得堆在...

    数据结构课件--江西师大.ppt

    5. **第7章**:可能涉及哈希表,这是一种通过哈希函数实现快速查找的数据结构,常用于构建字典、缓存和数据库索引。 6. **第8章图**:可能进一步探讨图的特殊话题,如最短路径问题(Dijkstra算法、Floyd-Warshall...

    数据结构教程-第5版-李春葆-配套课件PPT

    每种数据结构都有其特定的插入、删除和查找操作的时间复杂度,理解这些结构的优势和应用场景是学习数据结构的关键。 二、数组 数组是最基础的数据结构,它提供了一种方式来存储相同类型的数据元素集合。数组的特点...

    简要数据结构讲义--配合严蔚敏c版数据结构使用

    ### 数据结构核心知识点详解 #### 一、绪论 ##### 1. 数据结构与抽象数据类型 - **数据结构**:研究数据元素之间的逻辑关系和物理存储方式。 - **抽象数据类型(ADT)**:对数据...希望对学习数据结构的同学有所帮助。

    经典数据结构课件--清华大学--殷人坤.rar

    最大堆和最小堆常用于优先队列实现。 9. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,它们的目标是重新排列数据以按特定顺序排列。 10. **查找算法**:如二分查找、二叉搜索...

    数据结构课件--C语言描述

    8. **堆**:堆是一种特殊的树形数据结构,满足最大堆(父节点的值大于或等于子节点的值)或最小堆(反之)的性质。堆常用于优先队列的实现。 9. **排序与查找**:排序算法如冒泡排序、插入排序、选择排序、快速排序...

Global site tag (gtag.js) - Google Analytics