队列的实现
程序员文章站
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作为底层结构,更为简洁