package main
import (
"fmt"
)
type queue struct {
cursor int
data [10]int
}
func (q *queue) enqueue(value int) {
if q.data[q.cursor] != 0 {
panic("queue is full")
}
q.data[q.cursor] = value
q.cursor++
q.cursor %= 10
}
func (q *queue) dequeue() int {
q.cursor += 9
q.cursor %= 10
if q.data[q.cursor] == 0 {
panic("queue is empty")
}
result := q.data[q.cursor]
q.data[q.cursor] = 0
return result
}
func (q *queue) print() {
for _, v := range q.data {
fmt.Print(v, "\t")
}
fmt.Println()
}
func main() {
q := queue{}
q.print()
for i := 0; i < 10; i++ {
q.enqueue(i + 1)
}
q.print()
for i := 0; i < 3; i++ {
q.dequeue()
}
q.print()
for i := 100; i < 103; i++ {
q.enqueue(i)
}
q.print()
}
中途發(fā)現了 Go 和 Python 的取模運算有區(qū)別贪染,是一個坑廉邑。
因為 Python 除法是負無窮大取整柜思, -1//10 = -1
-1 * 10 + 9 == -1
寄雀,所以 9 就成了這個算式的余數。但是 Go 除法是向 0 取整奶稠,-1 / 10 = 0
-1 * 0 +(-1) == -1
所以同樣一個式子在 Go 中結果就是 -1俯艰。