//文件遍历
//轻量级 数组栈 深度遍历 数组队列,广度遍历
//重量级 链表栈 深度遍历 链表队列,广度遍历
package main
import "fmt"
//链表实现队列,头部插入尾部删除
type LinkQueue interface {
length() int
Enqueue(value interface{})
Dequeue() interface{}
}
type Node struct {
data interface{}
pNext *Node
}
type QueueLink struct {
rear *Node
front *Node
}
func NewLinkQueue() *QueueLink{
return &QueueLink{}
}
func (qlk *QueueLink) length() (int){
pnext := qlk.front
length := 0
for pnext.pNext != nil{
pnext=pnext.pNext
length++
}
return length
}
func (qlk *QueueLink) Enqueue(value interface{}){
newnode:= &Node{value,nil}
if qlk.front==nil{
qlk.front=newnode
qlk.rear=newnode
}else{
qlk.rear.pNext=newnode
qlk.rear=qlk.rear.pNext
}
}
func (qlk *QueueLink) Dequeue()interface{}{
if qlk.front == nil{
return nil
}
newnode:=qlk.front //记录头部位置
if qlk.front == qlk.rear{
qlk.front=nil
qlk.rear=nil
}else{
qlk.front=qlk.front.pNext
}
return newnode.data
}
func main(){
mylinkq := NewLinkQueue()
for i:=0;i<10000;i++{
mylinkq.Enqueue(i)
}
for data := mylinkq.Dequeue();data != nil;data=mylinkq.Dequeue(){
fmt.Println(data)
}
}
网友评论