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

导购网站建设网站制作代码

导购网站建设,网站制作代码,株洲市建设网站,现在o2o的平台有哪些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.bjxfkj.com.cn/article/101492.html

相关文章:

  • 自己做网站花钱么百度seo官网
  • 常州公司做网站2023新闻摘抄十条
  • 谁做违法网站长沙有实力的关键词优化价格
  • lovefort表白网站制作创建网站的基本步骤
  • wordpress 钻石 插件北京seo顾问推推蛙
  • 怎么查网站空间百度seo和sem的区别
  • 买一个网站服务器多少钱淘宝关键词查询工具
  • 免费建立手机网站数字营销公司排行榜
  • 网站开发策略推广方案策略怎么写
  • 技术型网站做哪一种好网站空间费用一年多少
  • 重庆建网站搜索快忻科技正规seo一般多少钱
  • 怎样做旅游城市住宿网站如何推广网站链接
  • 宁波 做网站的品牌推广与传播方案
  • 网站建设实验报告总结郑州seo优化外包顾问阿亮
  • 南京网站制作建设百度搜索最多的关键词
  • 重庆做网站哪家好网络营销流程
  • 网站上的小动画咋做百度广告联盟赚广告费
  • ajax做网站企业网络营销方案设计
  • 美容美发网站建设方案谷歌app下载 安卓
  • 网站登录注册做验证码的目地淘宝怎么提高关键词搜索排名
  • 织梦pc怎么做手机网站百度识图鉴你所见
  • 教做饮品的网站营销宣传策划方案
  • mrskinlove wordpress安卓系统优化app
  • 做国内网站花费建网站专业
  • 系统网站怎么做模板建网站价格
  • 佛山做外贸网站的公司吗百度网盘电脑网页版
  • 企业网站建设技术最新热点新闻
  • wordpress翠竹林合肥网站seo推广
  • 免费的网站搜索引擎优化是指什么
  • 惠阳网站建设公司广告媒体资源平台