Идиоматический способ реализации структуры данных стека в Go состоит в использовании среза:
- для push (добавления элемента в стек) вы используете встроенную функцию append
- для pop (извлечения верхнего элемента стека) вы выполняете срезание верхнего элемента
var stack []string
stack = append(stack, "world!") // Push
stack = append(stack, "Hello ")
for len(stack) > 0 {
n := len(stack) - 1 // Верхний элемент
fmt.Print(stack[n])
stack = stack[:n] // Pop
}
Вывод:
Hello world!
Производительность
Добавление отдельного элемента к срезу требует постоянного амортизированного времени.
Если стек является постоянным, а элементы временными, вы можете удалить верхний элемент перед извлечением элемента из стека, чтобы избежать утечек памяти.
// Pop
stack[n] = "" // Удаляем элемент (записываем нулевое значение)
stack = stack[:n]
О том что такое стек рекомендуем эту статью.
Читайте также:
- Массивы, срезы и строки: механика работы append в Golang
- Срезы в Golang: внутреннее устройство и использование
- Эффективный Go: срезы (slices)
Комментариев нет:
Отправить комментарий