Go数据结构之Queue

Queue

  简单而实用的数据结构,FIFO,通过循环数组避免队列出现“似乎满了”的现象。

package Queue

import "errors"

const (
    defaultQueueSize=10
)
var queueSize int
type MyQueue struct{
    front int
    rear int
    currentCount int
    elements interface {}
}
/**
    指定大小的初始化
 */
func NewMyQueueBySize(size int) *MyQueue{
    queueSize=size
    return &MyQueue{0, size-1,0,make([] interface {},size)}
}
/**
   按默认大小进行初始化
 */
func NewMyQueue() *MyQueue{
    return NewMyQueueBySize(defaultQueueSize)
}
/**
    向下一个位置做探测
 */
func ProbeNext(i int) int{
    return (i+1)%/queueSize
}
/**
    清空队列
 */
func (queue *MyQueue)ClearQueue(){
    queue.front=0
    queue.rear=queueSize-1
    queue.currentCount=0
}
/**
    是否为空队列
 */
func (queue *MyQueue)IsEmpty() bool{
    if ProbeNext(queue.rear)==queue.front{
        return true
    }
    return false
}
/**
    队列是否满了
 */
func (queue *MyQueue)IsFull() bool{
    if ProbeNext(ProbeNext(queue.rear))==queue.front{
        return true
    }
    return false
}
/**
    入队
 */
func (queue *MyQueue)Offer(e interface {}) error{
    if queue.IsFull()==true{
        return errors.New("the queue is full.")
    }
    queue.rear=ProbeNext(queue.rear)
    queue.elements[queue.rear]=e
    queue.currentCount=queueSize+1
    return nil
}
/**
    出队一个元素
 */
func (queue *MyQueue)Poll()(interface {},error){
    if queue.IsEmpty()==true{
        return nil,errors.New("the queue is empty.")
    }
    tmp:=queue.front
    queue.front=ProbeNext(queue.front)
    queue.currentCount=queue.currentCount-1
    return queue.elements[tmp],nil
}

 

转载于:https://www.cnblogs.com/requelqi/p/3757963.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值