某大厂二面编程题-用固定长度数组模拟队列实现
前言
刚面完某大厂二面golang后端,面试官人很好,给我出的面试题没那么难,但刚拿到手还是很懵B的,第一反应是拿切片实现,面试官同意了。虽然有点波折,但还是用切片做出来了。过程中有了数组实现的思路,就给面试官说了,他就我的思路问了几个问题,我回答的7788。二面也让我通过了,感恩。等待HR面,期待Offer。
一、题目
要求用固定长度数组模拟队列,要求实现入队、出队、队列长度、队列是否已满4个方法。
二、解决
1.切片实现
队列的特点是先进先出,我们只需要模拟这一过程就行。
go语言中,本来就可以用切片实现一个队列,入队的时候append到尾部,出队的时候,从头部开始切。经面试官提点,加了长度。注意实现的过程中出队时要判断队列里还有没有元素;入队时不能超过指定长度。
由于切片实现过于简单,我就只贴个结构体就行了,方法就不写了
type Queue struct {
len int
arr []int
}
2.固定长度数组实现
固定长度数组实现队列,需要注意的点是:
- 定义队列的长度
- 定义队列的头位置和尾位置
- 入队时队尾指针向后移,出队时对头指针向后移
- 注意头尾位置超过数组的最大长度处理
package main
import (
"errors"
"fmt"
"sync"
)
func main() {
queue := Queue{
}
var err error
for i := 0; i < 12; i++ {
if err = queue.In(i)