当前位置: 首页 > 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/695527/

相关文章:

  • 建立房产门户网站需要多少钱厦门百城建设有限公司网站
  • 怎么在自己电脑上建网站ftp怎么做网站
  • 2015年做网站行不行帮别人做网站 开票内容是什么
  • 国内优秀门户网站设计seo外包公司费用
  • php网站开发过程深圳网站建设 东毅虎
  • 网站 开发 周期免费的关键词挖掘工具
  • 广州培训+网站开发上海网站空间
  • 售房网站开发 .net微信聊天记录删除了怎么恢复
  • 做翻译的网站中国新闻社天津分社招聘
  • 网站设计论文分类号定制平台有哪些
  • 一级a做爰片在线看网站仿卢松松博客wordpress
  • 公司如何建立微网站查看WordPress网站插件
  • 网站开发费用计入科目建设工程计价
  • 网站认证空间网站的用户体验主要有那些类型
  • 做网站的app设计网站大全免费下载
  • 网站建设的学校网站被k是怎么回事
  • vs做网站用3层架构东道设计公司
  • 辽宁建设执业信息网站工业产品设计有哪些
  • 华大集团 做网站网站建设业务好做吗
  • 怎样在内网建设一个网站html5做网站导航
  • 商城网站开发企业网站开发职业要求
  • 手机网站出现广告豆瓣 wordpress
  • 自己可以自己做公司的网站吗中国十大管理咨询公司
  • 织梦网站地图模板样式适合友情链接的网站
  • 华大 网站建设网站内容 优化
  • 永修建设局网站自己做APP需要网站吗
  • 网站开发 托管合同自己做网站创业
  • 网站开发方式演进网站服务器有哪些种类
  • 湖南送变电建设公司 网站重庆多个区划定风险区
  • 温州学校网站建设合肥外贸网站建设公司价格