最强解析面试题:Goland 循环队列实现

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:Goland 循环队列实现相关的知识,希望对你有一定的参考价值。


最强解析面试题: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 循环队列实现的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:Goland 消费生产模式实现

最强解析面试题:Goland 实现LRU算法

最强解析面试题:Goland 并发版斐波那契数列

最强解析面试题:Goland 并发版斐波那契数列

Goland 实现LRU算法

数据结构 Java数据结构 栈和队列 以及LeetCode相关面试题