博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go数据结构之Queue
阅读量:6890 次
发布时间:2019-06-27

本文共 1512 字,大约阅读时间需要 5 分钟。

Queue

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

package Queueimport "errors"const (    defaultQueueSize=10)var queueSize inttype 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

你可能感兴趣的文章
图解Oracle RAC全局缓存等待事件Global Cache Wait Events
查看>>
Windows Server CA证书颁发机构续订
查看>>
jquery next()方法
查看>>
取IP地址
查看>>
Git详解之Git分支
查看>>
SaltStack部署Redis主从实现
查看>>
利用冗余实现企业局域网的高可用性
查看>>
nginx 配置页面压缩
查看>>
磁盘和文件系统管理(二)
查看>>
WCF中有关Session的小实验
查看>>
C#设计模式(13)——代理模式(Proxy Pattern)
查看>>
如何在VIEW 5中配置日志数据库
查看>>
android的互联网开发 下
查看>>
JDBC连接属性
查看>>
百度地图 demo 在html中显示 在jsp中不显示
查看>>
Mac下安装Caffe
查看>>
RDS-MSSQL问题排查方法
查看>>
实现u-boot对yaffs/yaffs2文件系统下载的支持
查看>>
Android Service与Activity之间通信的几种方式
查看>>
表格模板
查看>>