queue.go 1.6 KB
Newer Older
E
eoLinker API Management 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
package queue

type GokuQueue interface {
	Size() int                //大小
	Front() interface{}       //第一个元素
	End() interface{}         //最后一个元素
	IsEmpty() bool            //是否为空
	Enqueue(data interface{}) //入队
	Dequeue() interface{}     //出对
	Clear()                   //清空
}

type Queue struct {
	datastore []interface{}
	theSize   int
}

func (goku_queue *Queue) Clear() {
	goku_queue.datastore = make([]interface{}, 0) //开辟内存
	goku_queue.theSize = 0
}

func NewQueue() *Queue {
	goku_queue := new(Queue)
	goku_queue.Clear()
	return goku_queue

}

func (goku_queue *Queue) Size() int {
	return goku_queue.theSize //大小
}

func (goku_queue *Queue) Front() interface{} {
	if goku_queue.Size() == 0 { //判断是否为空
		return nil
	}
	return goku_queue.datastore[0]
}

func (goku_queue *Queue) End() interface{} {
	if goku_queue.Size() == 0 { //判断是否为空
		return nil
	}
	return goku_queue.datastore[goku_queue.theSize-1]
}

func (goku_queue *Queue) IsEmpty() bool {
	return goku_queue.theSize == 0
}

func (goku_queue *Queue) Enqueue(data interface{}) {
	goku_queue.datastore = append(goku_queue.datastore, data) //入队
	goku_queue.theSize = goku_queue.theSize + 1
}

func (goku_queue *Queue) Dequeue() interface{} {
	size := len(goku_queue.datastore)
	if size < 1 { //判断是否为空
		return nil
	}
	datastore := make([]interface{}, 0)
	data := goku_queue.datastore[0]
	if goku_queue.theSize > 1 {
		datastore = goku_queue.datastore[1:] //截取
	}
	goku_queue.datastore = datastore
	goku_queue.theSize = goku_queue.theSize - 1
	return data
}