美文网首页
用数组实现循环队列(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