当前位置: 首页 > news >正文

魔方 网站手机免费网站空间

魔方 网站,手机免费网站空间,北京流感最新消息,攀枝花市三线建设博物馆网站MyHeap:container/heap的数据载体,需要实现以下方法: Len:堆中数据个数 Less:第i个元素 是否必 第j个元素 值小 Swap:交换第i个元素和 第j个元素 Push:向堆中追加元素 Pop:从堆…

MyHeap:container/heap的数据载体,需要实现以下方法:

Len:堆中数据个数

Less:第i个元素 是否必 第j个元素 值小

Swap:交换第i个元素和 第j个元素

Push:向堆中追加元素

Pop:从堆中取出元素

下面是使用双向链路作为数据载体的最小堆实现方式:

package mainimport ("container/heap""fmt"
)type HeapItem struct {Value intPrev  *HeapItemNext  *HeapItem
}type MyHeap struct {Head   *HeapItemTail   *HeapItemLength int
}func (h *MyHeap) Len() int {return h.Length
}func (h *MyHeap) Less(i, j int) bool {return h.Find(i).Value < h.Find(j).Value
}func (h *MyHeap) Swap(i, j int) {nodeI, nodeJ := h.Find(i), h.Find(j)isNear := h.IsNear(nodeI, nodeJ)// 记录I的前和后nodeIPrev, nodeINext := nodeI.Prev, nodeI.Next// 记录J的前和后nodeJPrev, nodeJNext := nodeJ.Prev, nodeJ.Next// 把J放到I的位置nodeIPrev.Next = nodeJnodeJ.Prev = nodeIPrevnodeJ.Next = nodeINext // near, 对于相邻元素, 这样操作有问题, 下面会重新赋值nodeINext.Prev = nodeJ // near, 对于相邻元素, 这样操作有问题, 下面会重新赋值// 把I放到J的位置nodeJPrev.Next = nodeI // near, 对于相邻元素, 这样操作有问题, 下面会重新赋值nodeI.Prev = nodeJPrev // near, 对于相邻元素, 这样操作有问题, 下面会重新赋值nodeI.Next = nodeJNextnodeJNext.Prev = nodeI// 对于相邻元素,重新赋值if isNear {nodeJ.Next = nodeInodeINext.Prev = nodeIPrevnodeJPrev.Next = nodeJNextnodeI.Prev = nodeJ}
}func (h *MyHeap) Push(v interface{}) {newItem := v.(*HeapItem)temp := h.Tail.Prevtemp.Next = newItemnewItem.Prev = tempnewItem.Next = h.Tailh.Tail.Prev = newItemh.Length++return
}func (h *MyHeap) Pop() interface{} {realTailNode := h.Tail.PrevrealTailNode.Prev.Next = realTailNode.NextrealTailNode.Next.Prev = realTailNode.Prevh.Length--return realTailNode
}func (h *MyHeap) IsNear(nodeI, nodeJ *HeapItem) bool {if nodeI.Next == nodeJ {return true}return false
}func (h *MyHeap) Find(i int) *HeapItem {nodeI := h.Headfor k := 0; k <= i; k++ {nodeI = nodeI.Next}return nodeI
}func (h *MyHeap) Show() {forward := ""backward := ""i := 0for curr := h.Head; curr != nil && i < 10; curr = curr.Next {forward += fmt.Sprintf("'%d'->", curr.Value)i++}j := 0for curr := h.Tail; curr != nil && j < 10; curr = curr.Prev {backward = fmt.Sprintf("'%d'<-", curr.Value) + backwardj++}fmt.Printf("forward=%s, backward=%s\n", forward, backward)
}func InitHeap() *MyHeap {head := &HeapItem{Value: -1}tail := &HeapItem{Value: -2}head.Next = tailtail.Prev = headreturn &MyHeap{Head:   head,Tail:   tail,Length: 0,}
}func main() {myHeap := InitHeap()heap.Init(myHeap)heap.Push(myHeap, &HeapItem{Value: 10})heap.Push(myHeap, &HeapItem{Value: 1000})heap.Push(myHeap, &HeapItem{Value: 5})heap.Push(myHeap, &HeapItem{Value: 1})heap.Push(myHeap, &HeapItem{Value: 7})myHeap.Show()for myHeap.Len() > 0 {item := heap.Pop(myHeap).(*HeapItem)fmt.Printf("%d ", item.Value)}fmt.Println()
}

http://www.yayakq.cn/news/493214/

相关文章:

  • 北京网站如何做推广网站外链建设大揭秘
  • 网站开发有前途么北京网站关键词优化公
  • php网站开发缓存的运用官方网站建设制作平台
  • 类似卡盟网站卖怎么做潍坊 企业网站建设
  • 效果好网站建设哪家便宜网站建设原则应考虑哪些
  • 建设银行的英语网站首页个人做加盟商机网站如何盈利
  • 济南网站建设_美叶网络郑州网站推广优化外包公司
  • 怎么查询一个网站有没有做竞价网站怎样建设
  • 网站百度权重没有数据网站地域分站怎么做
  • 网页设计国外设计欣赏网站网站建设中的多语言翻译如何实现
  • 东莞网站定制html5网站基础
  • 建设网站作业做预算查价格的网站是哪个好
  • 免费金融发布网站模板下载网站经营性质
  • 网站建设做软件开发吗怎么找人做淘宝网站吗
  • 网站ui设计公司logo设计
  • 网站关键词优化方式公司网站推广计划书怎么做
  • 电商平台网站 建设目标中国建设银行手机银行下载
  • 做网站时如何确定网站主题在中国建设工程造价管理协会网站
  • 建设团队网站上海网页制作哪家好
  • 在招聘网站做销售技巧wordpress分类数组
  • 医院网站建设的理由重庆app定制
  • 建一个收费网站 怎么收费wordpress中文附件
  • 为什么做街舞网站做海报赚钱的网站
  • 简洁高端网站模板psd展厅设计费取费标准一览表
  • 单位网站及政务新媒体建设管理网站安全监测
  • 新乡新手学做网站武进网站建设市场
  • 网站建设的总体需求分析在建设银行网站能换美元吗
  • 家乡网站怎么做自助建站系统官网
  • 加盟培训网站建设网站建设初期目标
  • 网站目录权限周口网站建设费用