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-05-30:统计平衡排列的数目。用go语言,给定一个数字字符串 num,如果该字符串中所有位于奇数索引位置的数字之和与
- 2025-05-29:到达最后一个房间的最少时间Ⅱ。用go语言,你有一个大小为 n 行 m 列的地窖,每个格子代表一个房间,房间
- 2025-05-28:到达最后一个房间的最少时间Ⅰ。用go语言,你有一个地窖,里面由 n 行 m 列共 n*m 个房间组成,排列
- 2025-05-27:检查平衡字符串。用go语言,给定一个只包含数字字符(0-9)的字符串 num,如果位于偶数索引位置上的数字
- 2025-05-26:字符串转换后的长度Ⅱ。用go语言,你有一个只包含小写字母的字符串 s,一个整数 t 表示转换次数,还有一个
评论(0)