zoukankan      html  css  js  c++  java
  • golang数据结构之用循环链表解决约瑟夫环问题

    josephu.go

    package link
    
    import (
        "fmt"
    )
    
    type Kid struct {
        ID   int
        next *Kid
    }
    
    func AddKid(num int) *Kid {
        first := &Kid{}
        cur := &Kid{}
    
        if num < 1 {
            fmt.Println("不合法")
            return first
        }
        for i := 1; i <= num; i++ {
            kid := &Kid{
                ID: 1,
            }
            if i == 1 {
                first = kid
                cur = kid
                cur.next = first
            } else {
                tmpKid := &Kid{
                    ID: i,
                }
                cur.next = tmpKid
                cur = tmpKid
                cur.next = first
    
            }
        }
        return first
    }
    
    func ShowKid(first *Kid) {
        if first.next == nil {
            fmt.Println("链表已空")
        }
        cur := first
        for {
            fmt.Printf("小孩编号:%d
    ", cur.ID)
            if cur.next == first {
                break
            }
            cur = cur.next
        }
    }
    func Play(first *Kid, start int, count int) {
    
        if first.next == nil {
            fmt.Println("空链表")
            return
        }
        tail := first
        for {
            //到最后一个节点了
            if tail.next == first {
                break
            }
            tail = tail.next
        }
        //删除就以frst为主,让first移动到要删除的位置
        for i := 1; i <= start-1; i++ {
            first = first.next
            tail = tail.next
        }
        //开始数,然后进行删除
        for {
            for i := 1; i <= count-1; i++ {
                first = first.next
                tail = tail.next
            }
            fmt.Printf("编号为:%d  的出列
    ", first.ID)
            first = first.next
            tail.next = first
            if tail == first {
                break
            }
        }
        fmt.Printf("编号为:%d  的出列
    ", first.ID)
    }

    main.go

    package main
    
    import "go_code/data_structure/link"
    
    func main() {
    
        first := link.AddKid(20)
        link.ShowKid(first)
        link.Play(first, 1, 3)
    }

    运行结果:

    f:goprojectsrcgo_codedata_structure>go run main.go
    小孩编号:1
    小孩编号:2
    小孩编号:3
    小孩编号:4
    小孩编号:5
    小孩编号:6
    小孩编号:7
    小孩编号:8
    小孩编号:9
    小孩编号:10
    小孩编号:11
    小孩编号:12
    小孩编号:13
    小孩编号:14
    小孩编号:15
    小孩编号:16
    小孩编号:17
    小孩编号:18
    小孩编号:19
    小孩编号:20
    编号为:3 的出列
    编号为:6 的出列
    编号为:9 的出列
    编号为:12 的出列
    编号为:15 的出列
    编号为:18 的出列
    编号为:1 的出列
    编号为:5 的出列
    编号为:10 的出列
    编号为:14 的出列
    编号为:19 的出列
    编号为:4 的出列
    编号为:11 的出列
    编号为:17 的出列
    编号为:7 的出列
    编号为:16 的出列
    编号为:8 的出列
    编号为:2 的出列
    编号为:13 的出列
    编号为:20 的出列

  • 相关阅读:
    python 中给文件加锁——fcntl模块
    python生成二维码
    uwsgi常用配置
    php curl实现get和post请求
    python __enter__ 与 __exit__的作用,以及与 with 语句的关系
    python文件操作总结
    Python时间,日期,时间戳之间转换
    Python random模块(获取随机数)
    wigs的理解和应用
    shiro中接入单点登录功能
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12016460.html
Copyright © 2011-2022 走看看