gpt4 book ai didi

go - 使用 slice 在 Go 中实现一个简单的队列

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:37 26 4
gpt4 key购买 nike

我正在尝试使用 slice 在 Go 中实现一个非常简单的队列。这是我必须排队五个值然后丢弃前两个值的代码:

package main

import (
"fmt"
)

var (
localQ []int
)

func main() {
fmt.Printf("%v %v\n", localQ, len(localQ))
for i := 0; i< 5; i++ {
localQ = enqueue(localQ, i)

fmt.Printf("%v %v\n", localQ, len(localQ))
}

localQ = dequeue(localQ, 2)

fmt.Printf("%v %v\n", localQ, len(localQ))
}

func enqueue(q []int, n int) ([]int) {
q = append(q, n)

return q
}

func dequeue(q []int, s int) ([]int) {

r := q[s:]

q = nil

return r
}

关于dequeue函数的两个问题:

1- 我试图确保丢弃弹出的项目并收集垃圾。此函数是否导致它们被垃圾收集?

2- r := q[s:] 的时间和空间复杂度是多少?我知道每个 slice 下面都有一个数组。是否正在复制数组值?或者它只是一个被复制的指针?

最佳答案

Does this function result them to be garbage collected?

如果应用程序将足够数量的元素排入队列以导致重新分配 slice 后备数组,则之前的后备数组(及其元素)将符合收集条件。

What are the time and space complexities of r := q[s:]?

这是一个复杂度为 O(1) 的操作。该操作不会在堆上分配内存。

关于go - 使用 slice 在 Go 中实现一个简单的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com