其他分享
首页 > 其他分享> > Go Rust解题——使用[ ]int 固定长度数组实现循环队列

Go Rust解题——使用[ ]int 固定长度数组实现循环队列

作者:互联网

题目

622. 设计循环队列 - 力扣(LeetCode)

题解

rust 设计循环队列
设计循环队列 - 提交记录 - 力扣(LeetCode)

go 设计循环队列
设计循环队列 - 提交记录 - 力扣(LeetCode)

解题思路

使用[ ]int 固定长度数组实现循环队列

  1. 注意保留一个空位,方便后续实现。
  2. 长度 是可选项。
  3. 重点是 isEmpty 和 isFull 两个函数的判断逻辑。

代码

type MyCircularQueue struct {
    Head, Tail int
    Queue []int
    Length,size int
}


func Constructor(k int) MyCircularQueue {
    return MyCircularQueue{
        Head:0,
        Tail:0,
        Queue: make([]int,k+1,k+1),
        Length:0,
        size: k+1,
    }
}


func (this *MyCircularQueue) EnQueue(value int) bool {
    if this.IsFull() {
        return false
    }
    this.Queue[this.Tail]=  value
    this.Tail = (this.Tail + 1 + this.size) % this.size
    this.Length += 1
    return true
}


func (this *MyCircularQueue) DeQueue() bool {
    if this.IsEmpty() {
        return false
    }
    this.Head = (this.Head+1+this.size)%this.size
    this.Length -= 1
    return true
}


func (this *MyCircularQueue) Front() int {
    if this.IsEmpty(){
        return -1
    }
    return this.Queue[this.Head]
}


func (this *MyCircularQueue) Rear() int {
    if this.IsEmpty(){
        return -1
    }
    return this.Queue[ (this.Tail-1+this.size)%this.size ]
}


func (this *MyCircularQueue) IsEmpty() bool {
    return this.Head == this.Tail
}


func (this *MyCircularQueue) IsFull() bool {
    if (this.Tail + 1)%this.size == this.Head {
        return true
    }
    return false
}


/**
 * Your MyCircularQueue object will be instantiated and called as such:
 * obj := Constructor(k);
 * param_1 := obj.EnQueue(value);
 * param_2 := obj.DeQueue();
 * param_3 := obj.Front();
 * param_4 := obj.Rear();
 * param_5 := obj.IsEmpty();
 * param_6 := obj.IsFull();
 */

标签:Head,return,int,MyCircularQueue,Tail,Go,Rust,size
来源: https://blog.csdn.net/panda_8/article/details/117856951