golang环形队列实现代码示例
Summary
- 什么是环形队列
- 实现环形队列图示过程
- golang版本代码实现过程
- 参考全部代码
什么是环形队列
在一个指定大小的数组里循环写入数据,借用二个指针分别实现入队标记与出队标记.也体现了指针的大好用处,请深入体会.大有裨益.
如图所示,一个环形队列.含有二个指针: 队列头指针,队列尾指针.
实现环形队列图示过程
初始化一个数组大小为6的环形队列,头指针front=0,尾指针rear=0,刚好front=rear=0的状态,表示环形队列为空.
使用第3种方法:即当(rear+1)%maxLen==front时,判断环形数组满,则无法添加元素
golang版代码实现过程
a.定义环形数据结构
typeCycleQueuestruct{ data[]interface{}//存储空间 frontint//前指针,前指针负责弹出数据移动 rearint//尾指针,后指针负责添加数据移动 capint//设置切片最大容量 }
b.初始化环形队列
funcNewCycleQueue(capint)*CycleQueue{ return&CycleQueue{ data:make([]interface{},cap), cap:cap, front:0, rear:0, } }
c.入队操作
//入队操作 //判断队列是否队满,队满则不允许添加数据 func(q*CycleQueue)Push(datainterface{})bool{ //checkqueueisfull if(q.rear+1)%q.cap==q.front{//队列已满时,不执行入队操作 returnfalse } q.data[q.rear]=data//将元素放入队列尾部 q.rear=(q.rear+1)%q.cap//尾部元素指向下一个空间位置,取模运算保证了索引不越界(余数一定小于除数) returntrue }
d.出队操作
//出队操作 //需要考虑:队队为空没有数据返回了 func(q*CycleQueue)Pop()interface{}{ ifq.rear==q.front{ returnnil } data:=q.data[q.front] q.data[q.front]=nil q.front=(q.front+1)%q.cap returndata }
e:求当前的环形队列长度
//因为是循环队列,后指针减去前指针加上最大值,然后与最大值取余 func(q*CycleQueue)QueueLength()int{ return(q.rear-q.front+q.cap)%q.cap }
参考全部代码
github
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。