欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

队列的实现

程序员文章站 2022-03-08 09:09:15
...
//采用切片作为底层结构
package main 
import (
	"reflect"
	"fmt"
)
type Queue struct {
	Values []interface{}
	Type reflect.Type
}
//初始化一个队列
func NewQueue(valueType reflect.Type)*Queue{
	return &Queue{Values:make([]interface{},0),Type:valueType}
}
//判断是否符合队列类型
func (q *Queue) CheckValue(data interface{}) bool{
	if data == nil || reflect.TypeOf(data) != q.Type {
		return false
	}
	return true
}
//是否为空
func (q *Queue) Empty() bool {
	if len(q.Values) == 0 {
		return true
	}
	return false
}
//大小
func (q *Queue) Size() int {
	return len(q.Values)
}
//push
func (q *Queue) Push(data interface {}) bool {
	if !q.CheckValue(data){
		return false
	}
	q.Values = append(q.Values,data)
	return true
}
//pop 
func (q *Queue) Pop() interface{} {
	if q.Empty(){
		return nil
	}
	ret := q.Values[0]
	q.Values = q.Values[1:]
	return ret
}
func main() {
	queue := NewQueue(reflect.TypeOf(1))
	queue.Push(1)
	queue.Push(2)
	queue.Push(3)
	queue.Push(4)
	queue.Push(5)
	fmt.Println(queue.Values)
	fmt.Println(queue.Empty())
}
//也可采用container/list作为底层结构,更为简洁
相关标签: 队列 go