obsidian/笔记文件/2.笔记/基于堆实现优先级队列_第一章.md
2025-03-26 00:02:56 +08:00

2.2 KiB
Raw Permalink Blame History

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

!Pasted image 20240403171845.png

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

!Pasted image 20240403172023.png

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

!Pasted image 20240403172144.png

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

!Pasted image 20240403173332.png

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

!Pasted image 20240403173407.png

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

!Pasted image 20240403173545.png

进出队列

!Pasted image 20240403173656.png

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

!Pasted image 20240403173749.png

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

!Pasted image 20240403174016.png

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

!Pasted image 20240403174230.png

Main函数调用

!Pasted image 20240403174444.png

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

!Pasted image 20240403174423.png