Files
deep_go/homework/02.md
2025-05-23 07:54:04 +03:00

3.2 KiB
Raw Permalink Blame History

Домашнее задание №2

📗 В домашнем задании нужно реализовать кольцевую очередь (Circular Queue).

Кольцевая очередь (Circular Queue) — это структура данных, которая представляет собой очередь (FIFO) фиксированного размера. Кольцевая очередь использует буфер фиксированного размера таким образом, как будто бы после последнего элемента сразу же снова идет первый (как представлено на картинке справа). Подробнее можно прочитать здесь.

Такая структура много где используется, например для организации различных очередей сообщений и а также буффер в буфферезированных каналах Go реализован в виде кольцевой очереди.

alt text

API для кольцевой очереди будет выглядеть следующим образом:

// Предположим, что эта очередь будет оперировать только положительными
// числами (отрицательные числа ей никогда не поступят на вход)
type CircularQueue struct { ... }

func NewCircularQueue(size int)              // создать очередь с определенным размером буффера
func (q *CircularQueue) Push(value int) bool // добавить значение в конец очереди (false, если очередь заполнена)
func (q *CircularQueue) Pop() bool           // удалить значение из начала очереди (false, если очередь пустая)
func (q *CircularQueue) Front() int          // получить значение из начала очереди (-1, если очередь пустая)
func (q *CircularQueue) Back() int           // получить значение из конца очереди (-1, если очередь пустая)
func (q *CircularQueue) Empty() bool         // проверить пустая ли очередь
func (q *CircularQueue) Full() bool          // проверить заполнена ли очередь

📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке.

Задание со звездочкой

Выполнять необязательно, но если вы уже знакомы с дженериками в Go, то попробуйте реализовать обобщенную CircularQueue, которая сможет работать не только с int, но еще и с int8, int16, int32 и int64 типами данных.