Go

Goでのキューはただのスライス+appendで実装できる

More than 3 years have passed since last update.

Goでキューを実装するのには特別なデータ構造は必要がない。ただのスライスを使って、キューに加えるにはappend、キューから取り出すにはスライシングを使えば十分だ。キューが空かどうかはlenが0かどうかを調べれば良い。

// int型のキューを作成

q := make([]int, 0)

// キューに1, 2, 3を追加
q = append(q, 1)
q = append(q, 2)
q = append(q, 3)

// 最初の値を取得
v1 := q[0]
q = q[1:]

// 次の値を取得
v2 := q[0]
q = q[1:]

つまりスライスqの指している場所をqの内部配列の右側にどんどんずらしていくようなイメージだ。内部配列は必要に応じて再割り当てされるのでキューがあふれることはないし、再割り当ての際に左側の参照されていない領域は捨てられる(コピーされない)のでメモリ使用量がどんどん増えてしまうこともない。