码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • golang实现一个优先队列


    1. package main
    2. import "fmt"
    3. type StreamPriorityQueueData struct {
    4. key int
    5. value int
    6. }
    7. type StreamPriorityQueue struct {
    8. caches []StreamPriorityQueueData
    9. size int
    10. capacity int
    11. }
    12. func NewStreamPriorityQueue(size int) *StreamPriorityQueue {
    13. return &StreamPriorityQueue{
    14. caches: make([]StreamPriorityQueueData, size),
    15. capacity: size,
    16. }
    17. }
    18. func (q *StreamPriorityQueue) GetQueueTop() StreamPriorityQueueData {
    19. if len(q.caches) == 0 {
    20. return StreamPriorityQueueData{}
    21. }
    22. return q.caches[0]
    23. }
    24. func (q *StreamPriorityQueue) EnQueue(data StreamPriorityQueueData) {
    25. if q.size == q.capacity {
    26. return
    27. }
    28. q.size++
    29. var i int
    30. for i = q.size; q.caches[i/2].key > data.key; i /= 2 {
    31. q.caches[i] = q.caches[i/2]
    32. }
    33. q.caches[i] = data
    34. }
    35. func (q *StreamPriorityQueue) DeQueue() StreamPriorityQueueData {
    36. if q.size == 0 {
    37. return q.caches[0]
    38. }
    39. minElements := q.caches[1]
    40. lastElements := q.caches[(q.size)]
    41. var i int
    42. var child int
    43. for i = 1; i*2 <= q.size; i = child {
    44. child = i * 2
    45. //左右子节点比较,选较小的一方
    46. if child != q.size && (q.caches[child+1].key < q.caches[child].key) {
    47. child++
    48. }
    49. //最后一个元素和子节点比较,如果最后一个元素大,上提子节点
    50. if lastElements.key > q.caches[child].key {
    51. q.caches[i] = q.caches[child]
    52. } else {
    53. break
    54. }
    55. }
    56. q.caches[i] = lastElements
    57. fmt.Println(minElements)
    58. return minElements
    59. }
    60. func main() {
    61. q := NewStreamPriorityQueue(8)
    62. d := StreamPriorityQueueData{
    63. key: 1,
    64. value: 1,
    65. }
    66. q.EnQueue(d)
    67. d1 := StreamPriorityQueueData{
    68. key: 2,
    69. value: 2,
    70. }
    71. q.EnQueue(d1)
    72. d2 := StreamPriorityQueueData{
    73. key: 3,
    74. value: 3,
    75. }
    76. q.EnQueue(d2)
    77. d3 := StreamPriorityQueueData{
    78. key: 4,
    79. value: 4,
    80. }
    81. q.EnQueue(d3)
    82. d4 := StreamPriorityQueueData{
    83. key: 5,
    84. value: 5,
    85. }
    86. q.EnQueue(d4)
    87. q.DeQueue()
    88. q.DeQueue()
    89. q.DeQueue()
    90. q.DeQueue()
    91. q.DeQueue()
    92. q.EnQueue(d3)
    93. q.DeQueue()
    94. }

  • 相关阅读:
    python中的迭代器
    详解token已过期含义及解决方 token过期是否需要重新登录
    Java程序员们synchronized相关面试题,你接得住吗
    PySide6+VSCode Python可视化环境搭建
    基于eNSP中大型校园/企业网络规划与设计_综合大作业
    【Vue项目复习笔记】tabbar的封装
    算法通关村第十六关:白银挑战-滑动窗口经典问题
    【go零基础】go-zero从零基础学习到实战教程 - 0环境配置
    逍遥自在学C语言 | 第一个C语言程序 九层之台起于垒土
    文本框粘贴时兼容Unix、Mac换行符的方法源码
  • 原文地址:https://blog.csdn.net/qq_32783703/article/details/126384632
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号