简述
队列也是一种线性存储结构, 但它只能从队尾添加数据, 队头取出数据, 也就是先进先出FIFO(First In First Out). 请和栈(Stack)区分开.
在前端的应用
js里微任务和宏任务就是队列, 一些缓存池也可以用队列.
代码
完整代码(附测试用例)
基础结构
队列可以用数组和链表实现, 为了方便, 这里用数组.
1
2
3
4
|
// Queue 队列
type Queue struct {
queue []int
}
|
常用操作
一般操作就两个
- 向队列后添加一个数据
- 从队列前取出一个数据
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
|
// Len 长度
func (q *Queue) Len() int {
return len(q.queue)
}
func (q *Queue) String() (s string) {
for _, v := range q.queue {
s += strconv.Itoa(v)
}
return
}
// Enqueue 进队
func (q *Queue) Enqueue(val int) *Queue {
q.queue = append(q.queue, val)
return q
}
// Dequeue 出队
func (q *Queue) Dequeue() (res int) {
if q.Len() < 1 {
log.Fatal("Emtpy queue")
}
res = q.queue[0]
q.queue = q.queue[1:]
return
}
|