循环队列的实现(Go)

Mercia ·
更新时间:2024-11-15
· 582 次阅读

循环队列的结构定义如下:

// 循环队列结构定义 type CircularQueue struct { q []interface{} capacity int head int tail int }

实现操作如下:

创建队列 元素入队 元素出队 判满 判空 遍历队列

代码如下:

package main import "fmt" // 循环队列结构定义 type CircularQueue struct { q []interface{} capacity int head int tail int } // 新建队列 func NewCircularQueue(n int) *CircularQueue { if n == 0 { return nil } return &CircularQueue{ q: make([]interface{}, n), capacity: n, head: 0, tail: 0, } } // 队列判空 func (this *CircularQueue) IsEmpty() bool { if this.head == this.tail { return true } return false } // 队列判满 func (this *CircularQueue) IsFull() bool { if this.head == (this.tail + 1) % this.capacity { return true } return false } // 入队操作 func (this *CircularQueue) EnQueue(v interface{}) bool { if this.IsFull() { return false } this.q[this.tail] = v this.tail = (this.tail + 1) % this.capacity return true } // 出队操作 func (this *CircularQueue) DeQueue() interface{} { if this.IsEmpty() { return false } v := this.q[this.head] this.head = (this.head+1) % this.capacity return v } // 队列的遍历 func (this *CircularQueue) String() string { if this.IsEmpty() { return "empty queue!" } result := "head" var i = this.head for { result += fmt.Sprintf("<-%+v", this.q[i]) i = (i + 1) % this.capacity if i == this.tail { break } } result += "<-tail" return result }
作者:ClassmateLin



GO 队列 循环 循环队列

需要 登录 后方可回复, 如果你还没有账号请 注册新账号