文章目录
一、Golang数据结构-环形队列(数组)
1.处理方法
对前面的数组模拟队列的优化,充分利用数组,因此将数组看做是一个环形的。(通过取模的方法实现即可)
提示:
(1) 尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在判断队列满的时候需要注意:当 (tail + 1) % maxSize == head 时,表示队列满。
(2) tail == head 表示队列为空
(3) 初始化时,tail = 0,head =0
(4) 统计队列有多少个元素: (tail + maxSize - head) % maxSize
二、使用步骤
1.使用一个结构体管理环形队列
代码如下:
package main
import(
"fmt"
"errors"
"os"
)
//使用一个结构体管理环形队列
type CircleQueue struct{
maxSize int //5
array [5]int //数组
head int //指向队列队首 0
tail int //指向队列队尾 0
}
2.添加队列数据
代码如下:
func (this *CircleQueue) Push(val int)(err error){
if this.IsFull(){
return errors.New("queue full")
}
//通过分析得出this.tail 在队列尾部,但是不包含最后的元素
this.array[this.tail] = val
this.tail = (this.tail + 1) % this.maxSize
return
}
3.显示队列
代码如下:
func (