package main
import (
"fmt"
)
/***
* 构造节点,用接口类型,可以
* 入队列,出队列任意类型
*/
type Item interface {
}
/***
* 定义队列链
*/
type ItemQueue struct{
items []Item
}
/***
* 定义队列链接口
*/
type QueueIterface interface {
Init() ItemQueue
Push(t Item) ItemQueue
Pop() *Item
IsEmpty() bool
Size() int
}
/***
* 初始化队列
*/
func (s *ItemQueue) Init() *ItemQueue{
s.items = []Item{}
return s
}
/***
* 入队列
*/
func (s *ItemQueue) Push(t Item) *ItemQueue{
//append方法可以动态改变数组的长度
s.items = append(s.items,t)
return s
}
/***
* 出队列
*/
func (s *ItemQueue) Pop() *Item{
//获取队列顶端的数据
item := s.items[0]
//改变队列长度
s.items = s.items[1:len(s.items)]
return &item
}
func (s *ItemQueue) IsEmpty() bool{
return len(s.items) == 0
}
func (s *ItemQueue) Size() int{
return len(s.items)
}
type Node struct {
index int
data string
}
func main() {
var queue ItemQueue
if queue.items == nil{
itemQueu := ItemQueue{}
queue = *itemQueu.Init()
}
intf := func(val interface{})(item int,res bool){
//断言判断是否是int类型,并返回当前数据
p,ok := interface{}(val).(int)
item = 0
res = false
if ok {
item = p
res = true
}
return item,res
}
nodef := func(val interface{})(n Node,res bool){
//断言判断是否是Node类型,并返回当前数据
p,ok := interface{}(val).(Node)
n = Node{}
res = false
if ok {
n = p
res = true
}
return n,res
}
getPop := func(queue *ItemQueue) {
if !queue.IsEmpty(){
node := *queue.Pop()
item,res := intf(node)
if res {
fmt.Println(item)
}
n,res := nodef(node)
if res {
fmt.Println(n.data)
}
}
}
queue.Push(1)
queue.Push(2)
queue.Push(Node{1,"Hello World"})
queue.Push(Node{2,"GoLang is Good"})
getPop(&queue)
getPop(&queue)
getPop(&queue)
getPop(&queue)
getPop(&queue)
getPop(&queue)
getPop(&queue)
}
Golang练习用的队列
猜你喜欢
转载自blog.csdn.net/d_x_p_m_12/article/details/85281844
今日推荐
周排行