Очередь на языке Go
Очередь представляет собой линейную структуру, которая следует определенному порядку выполнения операций. Порядок — «первым пришел — первым обслужен» (FIFO).
Теперь, если вы знакомы с другими языками программирования, такими как C++, Java и Python, то есть встроенные библиотеки очередей, которые можно использовать для реализации очередей, но в случае с Golang это не так. Даже если вы не знакомы с ними, просто знайте, что Golang не предоставляет встроенной структуры очереди .
Как реализовать очередь на языке Go?
Есть много способов реализовать очереди в Golang, используя другие структуры данных, такие как:
- Использование фрагментов
- Использование структур
- Использование списка ссылок
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 перед каждым возвратом.