队列的Go语言实现
package Queue
import (
"errors"
"fmt"
)
type MyQueue interface {
Size() int
IsEmpty() bool
IsFull() bool
EnQueue(value interface{}) error
DeQueue() error
Travel()
}
type Queue struct{
DataStore []interface{}
TheSize int
}
func NewQueue(i int) *Queue {
newQueue := new(Queue)
newQueue.DataStore = make([]interface{},0,i)
newQueue.TheSize = i
return newQueue
}
func (queue *Queue) Size() int {
return len(queue.DataStore)
}
func (queue *Queue) IsEmpty() bool {
if len(queue.DataStore) == 0 {
return true
}
return false
}
func (queue *Queue) IsFull() bool {
if len(queue.DataStore) == queue.TheSize {
return true
}
return false
}
func (queue *Queue) Travel() {
if queue.IsEmpty() {
fmt.Println("empty queue")
return
}
for i, v := range queue.DataStore {
fmt.Printf("第 %d 个是:%v\n", i + 1, v)
}
}
func (queue *Queue) EnQueue(val interface{}) (err error) {
if queue.IsFull() {
return errors.New("queue is full")
}
queue.DataStore = append(queue.DataStore, val)
return nil
}
func (queue *Queue) DeQueue() (val interface{}, err error) {
if queue.IsEmpty() {
return nil ,errors.New("empty queue")
}
r := queue.DataStore[0]
queue.DataStore = queue.DataStore[1:]
return r, nil
}
func (queue *Queue) Clear() {
queue.DataStore = make([]interface{}, 0, queue.TheSize)
}