Queue in GO

队列的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)
}

你可能感兴趣的:(Queue in GO)