TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #4646 2.95K
Алгоритмы в PHP: Deque (и круговые буферы + связанные списки)

PHP массивы хорошо подходят для многих задач, но операции добавления элементов в начало массива (array_unshift) являются медленными, поскольку требуют сдвига всего массива. Решение для этого проблемы — использование deque (двусторонней очереди).

Очереди и стеки

В программировании, очереди и стеки играют важную роль:

Очередь (FIFO): первый пришел — первый ушел. Работает как очередь в магазине.
Стек (LIFO): последний пришел — первый ушел. Работает как стопка тарелок.

Двусторонняя очередь (Deque)

Deque позволяет добавлять и удалять элементы с обоих концов с эффективностью O(1). Обычно реализуется на основе связанных списков или кольцевого буфера и идеально подходит для реализации функций отмены (undo).

Реализация кольцевого буфера

Для улучшения производительности можно использовать кольцевой буфер, что минимизирует затраты на операции добавления и удаления элементов. Кольцевой буфер использует два курсора (head и tail), что позволяет добавлять и удалять элементы с обоих концов массива.

Добавление элемента в начало буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в начальной позиции, переместить его в конец массива.
🔸Иначе, декрементировать курсор.
🔸Добавить элемент в массив.

Добавление элемента в конец буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в конце массива, переместить его в начало.
🔸Иначе, инкрементировать курсор.
🔸Добавить элемент в массив.
  • 👍 5
  • ❤ 1
  • 🔥 1
  • 🥰 1
  • 👏 1
More from @phpproglib
  1. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  2. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  3. Sep 30, 2026🐸 Библиотека пхпшника
  4. Sep 29, 2026💡 Laravel-фича, которая спасает тесты от случайных запросов Http::preventStrayRequests()…
  5. Sep 28, 2026🔐 ramsey/uuid — UUID без самописного кода Библиотека помогает генерировать, парсить и вал…
  6. Sep 28, 2026🤔 Что выведет код? ❤️ — 1 🔥 — 2 👍 — 12 👾 — Fatal error 👇 Правильный ответ (нажми, что…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →