• 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 的出列

  • 相关阅读:
    POJ 2653 Pick-up sticks [线段相交 迷之暴力]
    POJ1556 The Doors [线段相交 DP]
    POJ 3304 Segments[直线与线段相交]
    POJ2318 TOYS[叉积 二分]
    挖坑
    HDU3488 Tour [有向环覆盖 费用流]
    BZOJ 3438: 小M的作物 [最小割]
    POJ 2125 Destroying The Graph [最小割 打印方案]
    网络流算法与建模总结
    CF266D. BerDonalds [图的绝对中心]
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12016460.html
Copyright © 2020-2023  润新知