使用slice实现queue队列

队列实现

队列实现包括, 创建队列, 入队, 出队, 队列是否为空等等操作

队列是一个循环队列, 不占用空间;

1-2-3-4-5-6
| |
<----------

NewQ(num int)
EnQ()
DeQ()
IsEmptyQ()
IsFullQ()


type Queue struct {
    Size  int
    Front int
    End   int
    Elem  []int
}

const FullQ = 4

func main() {
    fmt.Println("hello Q")
    q := NewQ(FullQ)

    q.EnQ(10)
    q.EnQ(11)
    q.EnQ(13)
    q.EnQ(14)
    q.EnQ(15)
    //_ = q.DeQ()
    fmt.Println(q.Front, q.End, q.Size)
    _ = q.DeQ()
    fmt.Println(q.Front, q.End, q.Size)
    q.EnQ(16)
    q.PrtQ()
}

func (q *Queue) PrtQ() {

    for i := 0; i < q.Size; i++ {

        if q.Front > q.End { // 进入循环

        }
        pos := (i + q.Front + 1) % FullQ
        fmt.Printf("%d ", q.Elem[pos])
    }
}

func NewQ(num int) *Queue {
    Q := Queue{0, 0, 0, make([]int, num)}

    return &Q
}

func (q *Queue) EnQ(val int) {
    if q.IsFullQ() {
        return
    }

    q.End = (q.End + 1) % FullQ
    q.Elem[q.End%FullQ] = val
    q.Size++
}

func (q *Queue) DeQ() int {

    if q.IsEmptyQ() {
        return 0
    }

    q.Front = (q.Front + 1) % FullQ
    val := q.Elem[q.Front%FullQ]
    q.Size--
    return val

}

func (q *Queue) IsEmptyQ() bool {
    if q.Size == 0 {
        return true
    }
    return false
}

func (q *Queue) IsFullQ() bool {
    if FullQ == q.Size {
        fmt.Println("Q is full")
        return true
    }
    return false
}

转载于:https://www.cnblogs.com/gpan/p/9847908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值