.net core 中实现一个堆结构
标签:switch value var int core 一个 where targe 位置
堆结构的内部是以数组实现,表现形式为一个完全二叉树,对应关系上,上级节点的下标始终等于直接下级节点的下标(任意一个)除2的除数,下级节点的坐标左孩子为上级坐标的位置2+1,右孩子为上级坐标的位置2+2,这个条件始终满足
如下代码就是一个简易的堆结构实现
using System;
namespace test1
{
public enum HeapType
{
Max,
Min
}
public class Heap where T:IComparable
{
private T[] _source;
private int _heapSize;
private HeapType _heapType;
public Heap(HeapType heapType)
{
this._heapType = heapType;
_source = new T[0];
_heapSize = 0;//堆大小为0;
}
public Heap(HeapType heapType,T[] lst)
{
this._heapType = heapType;
_source = lst;
_heapSize = lst.Length;//堆大小为0;
Heapfiy();
}
///
/// 获取当前最前边的值
///
public T GetTopValue
{
get
{
if (_heapSize > 0)
{
var result = _source[0];
swap(0, _heapSize-- - 1);//交换最后一个项,并调整堆大小
Heapfiy(0);
return result;
}
else
{
return default(T);
}
}
}
///
/// 插入数据
///
///
public void HeapInsert(T item)
{
if (++_heapSize > _source.Length)
{
var newlst = new T[_heapSize];
for (int i = 0; i > 1;
while (currentindex>0)
{
switch (_heapType)
{
case HeapType.Max:
if (_source[currentindex].CompareTo(_source[parrentindex])>0)
{
swap(currentindex, parrentindex);
}
break;
case HeapType.Min:
if (_source[currentindex].CompareTo(_source[parrentindex]) > 1;
}
}
///
/// 某一个位置的值下移到合适的位置
///
///
private void Heapfiy(int index)
{
var i = index;
switch (_heapType)
{
case HeapType.Max:
while (i * 2 + 1 0 ? i * 2 + 1 : i * 2 + 2;
}
if (_source[i].CompareTo(_source[targetchlidi]) 0)
{
swap(i, targetchlidi);
i = targetchlidi;
}
else
{
break;
}
}
break;
default:
break;
}
}
///
/// 对所有位置执行下移操作
///
private void Heapfiy()
{
for (int i = _heapSize >> 1; i >=0; i--)
{
Heapfiy(i);
}
}
private void swap(int a, int b)
{
T r = _source[a];
_source[a] = _source[b];
_source[b] = r;
}
}
}
.net core 中实现一个堆结构
标签:switch value var int core 一个 where targe 位置
原文地址:https://www.cnblogs.com/zzfstudy/p/14600634.html
评论