顺序队列结构定义如下:
type ArrayQueue struct {
q []interface{}
capacity int // 队列容量
head int // 队头指针
tail int // 队尾指针
}实现如下操作:
- 新建队列
- 元素入队
- 元素出队
- 队列是否为空/为满
- 队列的遍历
- 清空队列
代码如下:
package main
import "fmt"
type ArrayQueue struct {
q []interface{}
capacity int // 队列容量
head int // 队头指针
tail int // 队尾指针
}
// 创建队列
func NewArrayQueue(n int) *ArrayQueue {
return &ArrayQueue{
q: make([]interface{}, n),
capacity: n,
head: 0,
tail: 0,
}
}
// 入队操作
func (this *ArrayQueue) EnQueue(v interface{}) bool {
if this.tail == this.capacity { // 队列已满
return false
}
this.q[this.tail] = v
this.tail++
return true
}
// 出队操作
func (this *ArrayQueue) DeQueue() interface{} {
if this.head == this.tail { // 队列已空
return false
}
v := this.q[this.head]
this.head++
return v
}
// 队列不为空返回所有元素,否则返回空
func (this *ArrayQueue) String() string {
if this.head == this.tail {
return "empty queue!"
}
result := "head"
for i := this.head; i <= this.tail - 1; i++ {
result += fmt.Sprintf("<-%+v", this.q[i])
}
result += "<-tail"
return result
}
// 判断队列是否为空
func (this *ArrayQueue) Empty() bool {
if this.head == this.tail {
return true
}else {
return false
}
}
// 返回队列长度
func (this *ArrayQueue) Len() int {
return (this.tail - this.head + this.capacity) % this.capacity
}
// 返回队头元素
func (this *ArrayQueue) GetHead() interface{} {
if this.Empty() {
return nil
}
return this.q[this.head]
}
// 判断队列是否已满
func (this *ArrayQueue) Full() bool {
if this.tail == this.head {
return true
}
return false
}
// 清空队列
func (this *ArrayQueue) Clear() {
this.head = 0
this.tail = 0
}

京公网安备 11010502036488号