Очередь на языке Go

Опубликовано: 9 Января, 2023

Очередь представляет собой линейную структуру, которая следует определенному порядку выполнения операций. Порядок — «первым пришел — первым обслужен» (FIFO).

Теперь, если вы знакомы с другими языками программирования, такими как C++, Java и Python, то есть встроенные библиотеки очередей, которые можно использовать для реализации очередей, но в случае с Golang это не так. Даже если вы не знакомы с ними, просто знайте, что Golang не предоставляет встроенной структуры очереди .

Как реализовать очередь на языке Go?

Есть много способов реализовать очереди в Golang, используя другие структуры данных, такие как:

  1. Использование фрагментов
  2. Использование структур
  3. Использование списка ссылок

1. Реализуйте очередь с использованием слайсов на языке Go:

Реализация очереди с использованием простого слайса, в котором операции постановки в очередь и удаления из очереди выполняются с помощью функций. и Underflow (очередь пуста) проверяется во время операции удаления из очереди.

Output:
Enqueued: 10
After pushing 10  [10]
Enqueued: 20
After pushing 20  [10 20]
Enqueued: 30
After pushing 30  [10 20 30]
Queue After removing 10  : [20 30]
Enqueued: 40
After pushing 40  [20 30 40]

Примечание. Проблема в том, что мы не можем определить размер или емкость очереди. Однако это можно сделать, определив очередь как make([]int, 0, 10), где третий параметр определяет емкость, но проблема возникает, когда емкость динамически увеличивается в состоянии переполнения.

2. Использование структур:

Чтобы преодолеть проблему в предыдущем, используйте вместо этого структуры, которые состоят из

  • Элементы т.е. элементы очереди
  • Размер, т.е. вместимость

Используйте указатели, чтобы напрямую изменять очередь, не возвращая ее каждый раз, и проверяйте условия как переполнения, так и недополнения:

Output:
[]
[1]
[1 2]
[1 2 3]
Overflow
[1 2 3]
1
[2 3]
[2 3 9]
2
[3 9]

Примечание. Раньше мы сравнивали длину элементов с размером (определяемой емкостью) структуры очереди, которую лучше использовать.

3. Использование списка ссылок:

Output:
10

Примечание. Здесь также возникает проблема емкости, и для ее преодоления необходимо инициализировать другую переменную и сравнивать длину LinkList перед каждым возвратом.