.net core 中实现一个堆结构

2021-04-02 01:24

阅读:460

标签: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

上一篇:异步下载文件-html

下一篇:TFS安装配置


评论


亲,登录后才可以留言!