#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]<<",";
}
}
分享到:
相关推荐
《数据结构--严蔚敏》是一本经典的教材,由著名计算机科学家严蔚敏教授编写,对于学习者来说,它是理解和掌握数据结构的宝贵资源。这本书深入浅出地讲解了各种数据结构的理论基础和实现方法,涵盖了数组、链表、栈、...
7. **排序与查找**:排序算法(如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等)和查找算法(如顺序查找、二分查找、哈希查找)是数据结构的重要组成部分,它们对算法性能有显著影响。 8. **动态...
学习数据结构不仅可以提升编程技能,还能培养解决问题的逻辑思维,对软件开发、数据库设计和算法分析等领域至关重要。通过深入学习这些课件,你将能够更好地掌握数据结构的本质,并在实际项目中灵活运用。
在数据结构课程设计中,构建最小生成树是学习图算法的重要实践环节。本项目包含完整的工程文件和文档,提供了从理论到实现的全面学习体验。 首先,我们要理解最小生成树的定义:在一个加权无向图中,找到一棵包括...
6. **堆**:一种部分有序的树形数据结构,常用于优先队列的实现,如最小堆和最大堆。 7. **堆排序、快速排序、归并排序**等排序算法,它们的不同特性使得在处理大量数据时能选择最合适的方法。 8. **动态规划**和*...
本学习资料包"java数据结构--学习"聚焦于如何在Java环境下理解和应用各种数据结构,旨在提升开发者的技术水平,使其能够编写出更加高效和优化的代码。 1. **数组**:数组是最基本的数据结构,用于存储同类型元素的...
8. **堆**:堆是一种特殊的树形数据结构,满足堆属性(最大堆或最小堆)。C++标准库中的`std::priority_queue`是基于堆实现的。 9. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,...
数据结构课程设计报告——最小生成树 最小生成树是图论中的一个重要概念,它涉及到如何在给定的连通图中找到一棵边的集合,使得这些边连接了图中的所有顶点,且总权重最小。这个任务在各种工程优化问题中都有应用,...
这本书深入浅出地讲解了如何在Java编程环境中理解和实现各种核心数据结构和算法,是提升编程技能和解决实际问题的重要参考书籍。 1. 数据结构: 数据结构是组织和存储数据的方式,它直接影响到算法的效率和程序的...
最小最大堆是一种特殊的二叉堆数据结构,它同时满足最小堆和最大堆的特性。在最小最大堆中,根节点是所有元素中的最小值,而每个子树中又包含一个最大值。这样的设计使得在处理某些特定问题时,如查找最小和最大元素...
7. **堆**:堆是一种特殊的树形数据结构,满足堆性质(最大堆或最小堆)。堆常用于实现优先队列,并在排序算法(如堆排序)中有重要作用。 8. **散列表(哈希表)**:散列表通过哈希函数将数据映射到固定大小的数组...
- Prim算法:基于优先队列(最小堆),每次添加一条连接已选顶点和未选顶点的最小权重边。 五、其他图算法 1. 拓扑排序的应用:任务调度、编译器中的控制流分析等。 2. 最短路径的应用:路由选择、推荐系统、网络...
在这个基于Python的数据结构实现中,我们将深入探讨堆的概念、用途以及如何用Python来实现。 堆是一个完全二叉树,其中每个父节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。这种特性使得堆在...
5. **第7章**:可能涉及哈希表,这是一种通过哈希函数实现快速查找的数据结构,常用于构建字典、缓存和数据库索引。 6. **第8章图**:可能进一步探讨图的特殊话题,如最短路径问题(Dijkstra算法、Floyd-Warshall...
每种数据结构都有其特定的插入、删除和查找操作的时间复杂度,理解这些结构的优势和应用场景是学习数据结构的关键。 二、数组 数组是最基础的数据结构,它提供了一种方式来存储相同类型的数据元素集合。数组的特点...
### 数据结构核心知识点详解 #### 一、绪论 ##### 1. 数据结构与抽象数据类型 - **数据结构**:研究数据元素之间的逻辑关系和物理存储方式。 - **抽象数据类型(ADT)**:对数据...希望对学习数据结构的同学有所帮助。
最大堆和最小堆常用于优先队列实现。 9. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,它们的目标是重新排列数据以按特定顺序排列。 10. **查找算法**:如二分查找、二叉搜索...
8. **堆**:堆是一种特殊的树形数据结构,满足最大堆(父节点的值大于或等于子节点的值)或最小堆(反之)的性质。堆常用于优先队列的实现。 9. **排序与查找**:排序算法如冒泡排序、插入排序、选择排序、快速排序...