循环队列leetcode面试解答

本文介绍了如何使用C语言实现一个MyCircularQueue类,包含构造函数、入队、出队、获取队首和队尾元素,以及判断队列是否为空或满的方法。这些操作适用于需要高效插入和删除元素的场景,如消息队列和循环缓冲区。
摘要由CSDN通过智能技术生成
type MyCircularQueue struct {
    Parr []int
    Head int
    Tail int
    Length int
    Cap int
}


func Constructor(k int) MyCircularQueue {
    return MyCircularQueue{
        Parr: make([]int, k),
        Head: 0,
        Tail: 0,
        Length: k,
        Cap: 0,
    }
}


func (this *MyCircularQueue) EnQueue(value int) bool {
    if this.Head == this.Tail && this.Cap > 0{
        return false
    }

    this.Parr[this.Tail] = value
    this.Tail = this.Tail + 1

    if this.Tail == this.Length {
        this.Tail = 0
    }

    this.Cap = this.Cap + 1
    return true
}


func (this *MyCircularQueue) DeQueue() bool {
    if this.Head == this.Tail && this.Cap == 0 {
        return false
    }

    this.Head = this.Head + 1
    if this.Head == this.Length {
        this.Head = 0
    }

    this.Cap = this.Cap - 1

    return true
}


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


func (this *MyCircularQueue) Rear() int {
    if this.IsEmpty() {
        return -1
    }

    index := (this.Tail - 1 + this.Length) % this.Length
    return this.Parr[index]
}


func (this *MyCircularQueue) IsEmpty() bool {
    if this.Tail == this.Head && this.Cap == 0{
        return true
    }else {
        return false
    }
}


func (this *MyCircularQueue) IsFull() bool {
    if this.Head == this.Tail && this.Cap > 0{
        return true
    }else {
        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();
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值