美文网首页
用数组实现循环队列(go版本)

用数组实现循环队列(go版本)

作者: 小王同学123321 | 来源:发表于2022-05-21 16:14 被阅读0次
    package main
    
    import (
        "errors"
        "fmt"
    )
    
    //实现一个头部删除,尾部插入的循坏队列。循坏队列不需要数组的反复移动,效率比较高
    const QueueSize = 4
    //空一个空格表示满格
    
    type CricleQueue struct {
        data[QueueSize]interface{}
        front int
        rear int
    }
    
    func initQueue(q *CricleQueue){
        q.front=0
        q.rear=0
    }
    
    func Queuelength(q *CricleQueue)int{  //队列长度
        return (q.rear-q.front+QueueSize)%QueueSize
    }
    
    func EnQueue(q *CricleQueue,data interface{})(err error){
        if (q.rear+1)%QueueSize == q.front%QueueSize{
            return errors.New("队列已经满")
        }
        q.data[q.rear]=data  //入队
        q.rear=(q.rear+1)%QueueSize    //循环  到101回到1
        return nil
    }
    
    func DeQueue(q *CricleQueue)(data interface{},err error){
        if q.front == q.rear{
            return nil,errors.New("队列为空")
        }
        res := q.data[q.front]   //取出数据
        q.data[q.front]=0 // 清空数据
        q.front=(q.front+1)%QueueSize  //小于100加一,101回到1的位置
        return res,nil
    }
    
    func main(){
        var myq CricleQueue
        initQueue(&myq)
        EnQueue(&myq,1)
        EnQueue(&myq,2)
        EnQueue(&myq,3)
        EnQueue(&myq,4)
        EnQueue(&myq,5)
        fmt.Println(DeQueue(&myq))
        fmt.Println(DeQueue(&myq))
        fmt.Println(DeQueue(&myq))
        fmt.Println(DeQueue(&myq))
        fmt.Println(DeQueue(&myq))
    }
    

    输出结果


    结果

    相关文章

      网友评论

          本文标题:用数组实现循环队列(go版本)

          本文链接:https://www.haomeiwen.com/subject/nmvcprtx.html