queue.go 中的第一部分代码如下:

    用一个参数(size)保存队列中节点的数量很实用但不是必须的。不过为了简化操作,这里展示的实现还是提供了这个功能。

    queue.go 的第二部分包含如下的 Go 代码:

    1. func Push(t *Node, v int) bool {
    2. if queue == nil {
    3. queue = &Node{v, nil}
    4. size++
    5. return true
    6. }
    7. t = &Node{v, nil}
    8. t.Next = queue
    9. queue = t
    10. size++
    11. }

    queue.go 的第三部分包含如下 Go 代码:

    以上代码展示了 Pop() 函数的实现,该函数将最老的元素从队列中移除。如果队列为空(size == 0)就没有值可以返回。如果队列只有一个节点,那么将返回这个节点的值,队列也会变成空的。其他情况下将取出队列中的最后一个元素,并将移除最后一个节点,然后对节点的指针进行必要的修改,最后返回被删除节点的值。

    queue.go 的第四个代码段包含如下的 Go 代码:

    1. func traverse(t *Node) {
    2. if size == 0 {
    3. fmt.Println("Empty Queue!")
    4. return
    5. }
    6. for t != nil {
    7. fmt.Printf("%d -> ", t.Value)
    8. t = t.Next
    9. fmt.Println()

    queue.go 的最后一个代码段如下:

    main() 中几乎所有的代码都是对队列操作的检查。其中最重要的代码是两个 if 语句,它能让你知道 Pop() 函数返回了一个确切的值还是因队列为空而没有返回任何值。

    执行 queue.go 将产生如下输出:

    1. Size: 1
    2. 10 ->
    3. Pop: 10
    4. Size: 0
    5. 4 -> 3 -> 2 -> 1 -> 0 ->
    6. Size: 5
    7. Pop: 0
    8. Size: 4
    9. Pop: 1
    10. 4 -> 3 -> 2 ->