четверг, 20 февраля 2020 г.

Структура данных базового стека (LIFO) в Golang

Идиоматический способ реализации структуры данных стека в 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]

О том что такое стек рекомендуем эту статью.


Читайте также:


Комментариев нет:

Отправить комментарий