用链表实现队列(go版本)

//文件遍历
//轻量级 数组栈 深度遍历 数组队列,广度遍历
//重量级 链表栈 深度遍历 链表队列,广度遍历

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)
    }
}

你可能感兴趣的:(用链表实现队列(go版本))