Go语言中怎么实现一个小根堆,Java程序员表示看懵了

发布时间:2025-05-02 点击:0

下面是go语言中实现一个堆的代码,对于每一个堆,我们都需要实现5个方法,这点感觉比java的优先队列要复杂得多了,分别是len,用来计算容器得长度,less返回两个元素得大小关系,swap,用来交换两个数据。这几个实际上都是用来实现sort接口的。接下来,我们需要实现push跟pop方法,对于一个以前不是写go语言的人,可能觉得这个实现其实很冗余,push方法我们要做的就是往数据结构的最后面插入一个元素,而pop则是弹出一个元素,弹出元素则是简单的把最后一个元素取出来。小根堆不是最前面的元素才是最小的么?为什么是取最后一个元素?
我们看一下go语言中,heap的源码,堆需要你实现push跟pop接口,因为继承了sort接口,所以又要实现上面3个比较方法。
下面则是sort的接口,要求你实现长度,小于跟交换。
接下来则是堆里面的push操作,先是调用了你实现的往末尾添加一个元素的接口,然后执行up操作,维护小根堆。up操作的目的是为了保证小根堆里面每一个结点都比子节点小。
刚刚我们提出一个疑问,小根堆不是最前面的元素才最小么?这里堆里面的pop方法是先把最小的元素放到最后面,然后再来维护这个长度减一的小根堆。所以实际上你上面执行方法的时候,最后一个元素才是最小的!
这里不由感叹,还是java的priorityqueue封装的好,使用起来更加方便。虽然很多人特别推崇go,但我觉得每种语言都有各自的优点缺点,都说go写起来很方便,这不,还是java大法好。


微信开放搜索,用户体验和商业变现该如何协调?
网站做好付费会员制 对网站运营的好处
销型网站建设的核心思想是什么?
上海网站建设,讲求的是实力和信誉
企业外贸网站建设需要注意哪些?
要保持企业网站建设与企业发展方向的一致性
浅析如何优化好网站二级域名
如何编写一篇好文案