2020-11-14:手写代码:怎么用数组实现不超过固定大小的队列?
【摘要】 福哥答案2020-11-14:环形数组即可实现。数组,pull序号,pop序号,长度,容量,需要保存这些信息。golang代码如下:package mainimport ( "errors" "fmt")/*怎么用数组实现不超过固定大小的队列?队列:环形数组*/func main() { fmt.Println("----------------------") if...
福哥答案2020-11-14:
环形数组即可实现。数组,pull序号,pop序号,长度,容量,需要保存这些信息。
golang代码如下:
package main
import (
"errors"
"fmt"
)
/*
怎么用数组实现不超过固定大小的队列?
队列:环形数组
*/
func main() {
fmt.Println("----------------------")
if true {
fmt.Println("定长队列测试")
stack := NewMyQueue(2)
fmt.Println(stack.Push(1))
fmt.Println(stack.Push(2))
fmt.Println(stack.Push(3))
fmt.Println("----")
fmt.Println(stack.Pop())
fmt.Println(stack.Pop())
fmt.Println(stack.Pop())
fmt.Println("\r\n----------------------")
}
}
type MyQueue struct {
Arr []int
Pushi int
Popi int
Size int //元素个数
Limit int //最大容量,值不变
}
func NewMyQueue(l int) *MyQueue {
ret := &MyQueue{}
ret.Arr = make([]int, l)
ret.Pushi = 0
ret.Popi = 0
ret.Size = 0
ret.Limit = l
return ret
}
func (f *MyQueue) Push(val int) error {
if f.Size == f.Limit {
return errors.New("栈满了,不能再加了")
}
f.Size++
f.Arr[f.Pushi] = val
f.Pushi = f.nextIndex(f.Pushi)
return nil
}
func (f *MyQueue) Pop() (int, error) {
if f.Size == 0 {
return 0, errors.New("栈空了,不能再拿了")
}
f.Size--
ans := f.Arr[f.Popi]
f.Popi = f.nextIndex(f.Popi)
return ans, nil
}
func (f *MyQueue) IsEmpty() bool {
return f.Size == 0
}
//下一个序号,循环着来
func (f *MyQueue) nextIndex(i int) int {
if i < f.Limit-1 {
return i + 1
} else {
return 0
}
}
执行结果如下:
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
- 2025-03-07:网格图操作后的最大分数。给定一个 n x n 的二维矩阵 grid,初始时所有格子均为白色。你可以进行操作
- 2025-03-06:给定一个长度为 n 的整数组 nums,其中 n 是偶数,同时还有一个整数 k。 你可以进行一些操作,每次
- 绝了!k3s (k8s) 安装 ollama 运行 deepseek 全流程揭秘,yaml全公开
- 2025-03-04:求出硬币游戏的赢家。用go语言,给定两个正整数 x 和 y,分别代表75元和10元硬币的数量。 Alice
- 2025-03-03:切蛋糕的最小总开销Ⅱ。用go语言,你有一个大小为 m x n 的矩形蛋糕,需要将其切割成 1 x 1 的小
评论(0)