golang实现循环队列

package main

import "fmt"

const Size = 10

//循环队列
type queue struct {
    Array []int
    Front int
    Rear int
}

//初始化
func QueueInit()queue  {
    return queue{
        Array: make([]int,Size),
        Front: 0,
        Rear: 0,
    }
}

//放入元素
//1 true 0 false
func (m *queue)inQueue(x int) int{
    //还有一个空间就判满
    if (m.Rear+1)%Size==m.Front{
        return 0
    }
    m.Array[m.Rear] = x
    m.Rear = (m.Rear+1)%Size
    return 1
}

//释放元素
func (m*queue)outQueue()int  {
    if m.Front==m.Rear{
        return -1
    }
    res:=m.Array[m.Front]
    m.Front = (m.Front+1)%Size
    return res
}

//队列长度
func (m*queue)getLen()int {
    return (m.Rear-m.Front+Size)%Size
}

func main() {
    que:=QueueInit()
    for i:=0;i<10;i++{
        que.inQueue(i)
    }
    //在还剩一个空间的时候就判断已满
    que.inQueue(9)
    que.outQueue()
    fmt.Println(que.Array)
}

 

posted @ 2020-12-30 14:16  海拉尔  阅读(406)  评论(0编辑  收藏  举报