golang 实现数据结构
package main
import "errors"
// 逻辑结构: 只允许在表的一端进行插入, 另一端进行删除的线性表
// 由于线性队列会出现上溢出, 因此讨论循环队列
var ErrQueueFull = errors.New("队满错误")
var ErrQueueEmpty = errors.New("队空错误")
type Queue struct {
data []interface{}
Front, Rear int
maxSize int
}
// 初始化
func (q *Queue) InitQueue(maxSize int) {
q.maxSize = maxSize
q.data = make([]interface{}, maxSize)
q.Front = 0
q.Rear = 0
}
// 判空
func (q Queue) isNull() bool {
if q.Front != q.Rear {
return false
}
return true
}
// 判满(如果队尾指针追上队首指针, 则认为队满)
func (q Queue) isFull() bool {
if (q.Rear + 1) % q.maxSize == q.Front{
return true
}
return false
}
// 入队
func (q *Queue) EnQueue(Element interface{}) error {
if q.isFull(){
return ErrQueueFull
}
q.data[q.Rear] = Element
q.Rear = (q.Rear + 1) * q.maxSize
return nil
}
// 出队
func (q *Queue) DeQueue()(interface{}, error) {
if q.isNull(){
return nil, ErrQueueEmpty
}
e := q.data[q.Front]
q.Front = (q.Front + 1) % q.maxSize
return e, nil
}