这个泛型堆队列相关类,是继承IComparabled,用来数据比较,参考IComparable接口,用Lst队列容器,存放堆数据; 构造函数中,实例化一个容量4的队列即可;

比较之后,根据大小,会进行数据位置变换,使用Swap完成即可

这俩接口,HeapfiyUp是通过CompareTo把比较最大值放到堆顶端; HeapfiyDown是在topIndex索引,和endIndex索引之间,重新排序,把比较最小值,放到堆底端; 因为会有,在堆里移除某个索引数据的Remove逻辑,所以移除之后,也需要HeapfiyDown,对剩余的堆进行重新排序;

移除某个index索引节点的逻辑

Peek是拿到堆0索引的数据,但是不移除队列,IndexOf是基于item元素,拿到它在队列中的索引信息

几个函数接口,分别是移除item,清空队列,检测是否包含item,队列判空,数组转换,参考List的toArray()方法

进出队列

测试逻辑,Item类,也是继承自IComparabled数据比较,其中声明了itemName名字和priority优先级; 还实现了CompareTo的具体逻辑,是跟另一个Item实体,进行priority优先级的比较即可; 还有一个PrintInfo函数,是用来打印,对应该Item的名字和优先级相关信息;

弄一个静态函数LoopTest,测试堆优先级队列逻辑; 遍历,通过随机数生成优先级,创建出来的itemLst,使用Enqueue进队列接口,塞进PEQue里; 通过RemoveAt接口,测试随机移除数据;

再通过Dequeue接口,测试出队列逻辑,是否正常; 会把出队列的数据,都塞到outLst这个,队列; 如果新队列,其中的优先级异常,就会抛出异常,并且终止程序;

Main函数调用

运行,逻辑正常,无异常抛出