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

Две базовых реализации очереди FIFO в Golang

Простой способ реализовать структуру данных временной очереди в Go - это использовать срез:

  • чтобы добавить в очередь, вы используете встроенную функцию append
  • чтобы удалить из очереди - срезать первый элемент

var queue []string

queue = append(queue, "Hello ") // Добавление в очередь
queue = append(queue, "world!")

for len(queue) > 0 {
    fmt.Print(queue[0]) // Первый элемент
    queue = queue[1:]   // Удаление из очереди
}

Вывод:

Hello world!

Остерегайтесь утечек памяти

Вы можете удалить первый элемент перед удалением из очереди.

// Удаление из очереди
queue[0] = "" // Удаляем элемент 
              // (записываем нулевое значение)
queue = queue[1:]

Предупреждение: память, выделенная для массива, никогда не возвращается. Для долгоживущей очереди вам, вероятно, следует использовать динамическую структуру данных, такую как связанный список.

Связанный список

Пакет container/list реализует двусвязный список, который можно использовать в качестве очереди.

queue := list.New()

queue.PushBack("Hello ") // Добавление в очередь
queue.PushBack("world!")

for queue.Len() > 0 {
    e := queue.Front() // Первый элемент
    fmt.Print(e.Value)

    queue.Remove(e) // Удаление из очереди
}

Вывод:

Hello world!


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


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

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