在 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 中非常重要和常用的数据结构之一,掌握其基本操作对于编写高效、可读性强且易维护的代码至关重要。




