队列是什么?

queue作为一种先进先出FIFO, First-In-First-Out)的线性表结构,在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

在Go语言中,使用slice模拟队列结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
type Queue interface {
// 将 i 添加到 队尾
Enqueue(i int)
// 返回队首的i, 如果队空,则返回error
Dequeue() (i int, err error)
}

type queue struct {
slice []int
}

func (q *queue) Enqueue(i int) {
q.slice = append(q.slice, i)
}

func (q *queue) Dequeue() (i int, err error) {
if len(q.slice) == 0 {
return 0, errors.New("no int in queue")
}
// 获取队首
i = q.slice[0]
// 删除队首
q.slice = q.slice[1:]
return
}

func (q *queue) String() string {
return fmt.Sprintf("%#v", q.slice)
}


推荐文章(由hexo文章推荐插件驱动)