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-07-11:使每一列严格递增的最少操作次数。用go语言,给定一个由非负整数组成的 m 行 n 列的矩阵 grid。 每
- 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度为 n 的二进制字符串 s 和一个允许执行的最大操作次数
- 2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,给定一个整数数组 nums 和一个整数 k,对于数组中的
- 2025-07-08:使数组元素互不相同所需的最少操作次数。用go语言,给定一个整数数组 nums,要求通过若干次操作使数组中的
- 2025-07-06:判断网格图能否被切割成块。用go语言,给定一个大小为 n x n 的网格,坐标系的原点设在左下角。你有一个
评论(0)