ZBLOG

golang 队列解析

在 Go 中,队列(Queue)是一种常见的数据结构,它是一种先进先出(FIFO)的线性表。队列中元素的插入和删除操作分别在队尾和队头进行。

使用数组实现队列:

type Queue struct {
    data []int
}

func (q *Queue) Enqueue(val int) {
    q.data = append(q.data, val)
}

func (q *Queue) Dequeue() int {
    if len(q.data) == 0 {
        return -1 // 队列为空
    }
    val := q.data[0]
    q.data = q.data[1:]
    return val
}

使用链表实现队列:

type Node struct {
    Val  int
    Next *Node
}

type Queue struct {
    head *Node // 头指针,即队首节点指针
    tail *Node // 尾指针,即队尾节点指针
}

func (q *Queue) Enqueue(val int) {
    newNode := &Node{Val: val}
    
    if q.head == nil && q.tail == nil { // 队列为空,新建一个节点作为头和尾
        q.head = newNode
        q.tail = newNode
        return
    }
    
    q.tail.Next = newNode // 将新节点添加到尾部,并更新尾指针为新节点 
    q.tail = newNode 
}

func (q *Queue) Dequeue() int {
     if q.head == nil { // 队列为空,返回-1 
         return -1 
     }

     val := q.head.Val 
     q.head = q.head.Next // 将头指针向后移动一位 
     
     if q.head == nil { // 队列只有一个元素时,更新尾指针为nil
         q.tail = nil 
     }
     
     return val 
}

注意:队列中删除元素时,需要将头指针向后移动一位,并更新尾指针(如果队列为空,则应同时更新头和尾指针为nil)。

总之,队列是 Go 中非常重要和常用的数据结构之一,掌握其基本操作对于编写高效、可读性强且易维护的代码至关重要。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6472

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?