最强解析面试题:Goland 循环队列实现
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:Goland 循环队列实现相关的知识,希望对你有一定的参考价值。
![](https://img-blog.csdnimg.cn/3f8693a48c354971955709da4de71de9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6a2P5bCP6KiA,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
最强解析面试题:Goland 循环队列实现
文章讲解 “ Goland 循环队列实现 ” 经典面试题,包含思路及源码,及解惑!
题目
使用 Goland 实现循环队列
思路
利用数组加首尾下标实现循环队列
- 数组覆盖存储
- 首尾下标实现循环
- channel 实现并发安全
代码
package main
import (
"fmt"
"sort"
"strings"
)
const Size = 10
func main()
que := NewQueue()
for i := 0; i < 10; i++
que.InQueue(i)
fmt.Println(que.Arr)
que.OutQueue()
que.InQueue(9)
que.InQueue(10)
fmt.Println(que.Arr)
que.OutQueue()
que.InQueue(10)
que.OutQueue()
que.InQueue(11)
fmt.Println(que.Arr)
type Queue struct
Arr []interface
front int
rear int
ch chan bool
func NewQueue() *Queue
return &Queue
Arr: make([]interface, Size),
front: 0,
rear: 0,
ch: make(chan bool, 1),
func (q *Queue) InQueue(v interface) bool
q.ch <- true
defer func() <-q.ch ()
if (q.rear+1)%Size == q.front
return false
q.Arr[q.rear] = v
q.rear = (q.rear + 1) % Size
return true
func (q *Queue) OutQueue() interface
q.ch <- true
defer func() <-q.ch ()
if q.rear == q.front
return false
v := q.Arr[q.front]
q.front = (q.front + 1) % Size
return v
func (q *Queue) LenQueue() int
return (q.rear - q.front + Size) % Size
附录
自负和自大真的是搞笑!
以上是关于最强解析面试题:Goland 循环队列实现的主要内容,如果未能解决你的问题,请参考以下文章