美文网首页
用链表实现队列(go版本)

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

作者: 小王同学123321 | 来源:发表于2022-05-22 15:47 被阅读0次

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

    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版本)

          本文链接:https://www.haomeiwen.com/subject/mvgcprtx.html