码农知识堂 - 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. }

  • 相关阅读:
    关键词搜索抖音商品列表API接口-(item_search-根据关键词取商品列表API接口)
    tiup dm stop
    社区志愿者招募管理系统
    【AI作画】使用stable-diffusion-webui搭建AI作画平台
    【用户画像】数据层mybatis、mabatis-plus介绍和使用,多数据源配置、生成分群基本信息(源码实现)
    Node.js躬行记(23)——Worker threads
    NumPy学习挑战第四关-NumPy数组属性
    面试再也不怕问ThreadLocal了
    2015软专算法题T2
    计算机毕业设计springboot+vue基本微信小程序的医疗监督反馈小程序
  • 原文地址:https://blog.csdn.net/qq_32783703/article/details/126384632
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号