golang数据结构之用循环链表解决约瑟夫环问题
时间:2022-07-23
本文章向大家介绍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("小孩编号:%dn", 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 的出列n", first.ID)
first = first.next
tail.next = first
if tail == first {
break
}
}
fmt.Printf("编号为:%d 的出列n", 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 的出列
- 美团大众点评 Hybrid 化建设
- Linux系统date命令无法修改或同步时间的解决办法
- Redex 初探与 Interdex:Andorid 冷启动优化
- JS延时判断,改善中国博客联盟展示导航自动点击的灵敏度
- RecyclerView 必知必会
- Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点
- Android ImageView 正确使用姿势
- Go语言Goroutine与Channel内存模型
- Tile:一个崭新出炉的机器学习语言
- GO语言标准库概览
- 举个卡戴珊的例子,讲讲Hinton的Capsule是怎么回事 | 教程+代码
- Go语言基于Socket编写服务器端与客户端通信的实例
- 从0到1打造直播 App
- iOS App 签名的原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 同事埋了个坑:Insert into select语句把生产服务器炸了
- VBA使用API_01:读取文件
- 从0到1,撸一个IDEA插件,So Easy!
- VBA调用外部对象02:FileSystemObject
- VCS与Verdi的联合仿真
- ADC数据接入到AXI-Steam Interface
- Java面试必问:ThreadLocal终极篇 淦!
- BERT文本摘要
- 【NPM库】- 0x01
- 基于分类任务的信号(EEG)处理--代码分步解析
- 文件操作——举例
- flink之udf执行流程分析篇
- VBA调用外部对象02:FileSystemObject——操作文本文件
- 打卡群刷题总结0723——组合
- VBA根据单元格底色统计个数