Go: Queue implementation (array)
package main import ( "errors" "fmt" "os" ) type Queue struct { size int array []int head int tail int } func (queue *Queue) Push(v int) error { if queue.IsFull() { return errors.New("queue is full") } queue.array[queue.tail] = v queue.tail = (queue.tail + 1) % queue.size return nil } func (queue *Queue) Pop() (v int, err error) { if queue.IsEmpty() { return 0, errors.New("queue is empty") } v = queue.array[queue.head] queue.head = (queue.head + 1) % queue.size return } func (queue *Queue) List() { fmt.Println("~~~~~~~~queue info~~~~~~~~") fmt.Println("size:", queue.Size()) fmt.Println("head:", queue.head) fmt.Println("tail:", queue.tail) fmt.Println("queue.array:", queue.array) size := queue.Size() if size == 0 { fmt.Println("queue is empty") } head := queue.head for b := 0; b < size; b++ { fmt.Printf("queue[%d]=%d\t", head, queue.array[head]) head = (head + 1) % queue.size } fmt.Println() } func (queue *Queue) Size() int { switch { case queue.tail > queue.head: return queue.tail - queue.head // queue.tail指向最后一个元素的下一个元素 case queue.tail < queue.head: return queue.size - (queue.head - queue.tail) default: return 0 } } func (queue *Queue) IsFull() bool { return (queue.tail+1)%queue.size == queue.head } func (queue *Queue) IsEmpty() bool { return queue.tail == queue.head } func main() { var size int = 4 queue := &Queue{ size: size + 1, array: make([]int, size+1, size+1), head: 0, tail: 0, } fmt.Printf("%T %v %p\n", queue, queue, queue) var ( key string v int ) for { fmt.Println("1. 输入add 表示添加数据到队列") fmt.Println("2. 输入get 表示从队列获取数据") fmt.Println("3. 输入show 表示显示队列") fmt.Println("4. 输入exit 表示退出队列") _, err := fmt.Scanln(&key) if err != nil { fmt.Println("input err:", err) // return } switch key { case "add": fmt.Println("输入你要入队列数") _, err = fmt.Scanln(&v) if err != nil { return } err = queue.Push(v) if err != nil { fmt.Println(err.Error()) } else { fmt.Println("push success") } case "get": v, err = queue.Pop() if err != nil { fmt.Println(err.Error()) } else { fmt.Println("value:", v) } case "show": queue.List() case "exit": os.Exit(0) } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具