Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 19.02.2018
Сообщений: 8

Кольцевой буффер

01.03.2018, 23:47. Показов 5738. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю задания с книги Algorithms, 4th Edition by Robert Sedgewick :

1.3.37 Кольцевой буфер.

Кольцевой или кольцевая очередь - это структура данных с правилом FIFO фиксированного размера N, удобная для передачи данных между асинхронными процессами или для хранения файлов журналов. Если буфер пуст, получатель ждет поступления в него данных; если буфер полон, отправитель ждет, когда можно будет поместить данные.
Разработайте API - интерфейс для типа RingBuffer и реализуйте его на основе массива.

Здесь для меня все понятно, кроме того как можно закольцевать массив, не лучше ли реализация на основе списка? Спасибо за внимание.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2018, 23:47
Ответы с готовыми решениями:

Из Edit в буффер
Мне нужно, что бы при вводе пользователем данных в Edit ,данные копировались в буффер. Как это сделать? Спасибо за ответ. Добавлено...

Сокеты, динамический буффер
Всем добрый день. Есть клиент и сервер, соединение устанавливается(winsock2). Задача - создать буффер, записать в него нужные данные и...

Запись в буффер и обработка
Люди добрые помогите переписать, дописать функцию обработки файла в буфере, у меня пока работает это так, воожу пароль открываю файл он...

3
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,879
02.03.2018, 09:56
Цитата Сообщение от TheNooob Посмотреть сообщение
как можно закольцевать массив
Code
1
index = index % size
1
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,664
Записей в блоге: 21
02.03.2018, 13:43
Кольцевые списки
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.03.2018, 16:34
Лучший ответ Сообщение было отмечено TheNooob как решение

Решение

Shamil1, Это Wrap Around - т.е зацикливание самого индекса.
TheNooob, У кольцевого буфера(очереди) все веселее.
Т.е. имеется два указателя(индекса) - голова и хвост в начале равные нулю (указывают на первый элемент). При добавлении в буфер (очередь) новый элемент пишется в положение хвоста и хвост сдвигается на единицу вперед с учетом wrap around. При извлечении элемент извлекается из головы и вперед смещается голова тоже с учетом wrap around. Если голова догнала хвост то буфер пуст и их можно обнулить. Если хвост догнал голову то буфер переполнен.
Т.е. аналог закольцованной ленты с раздельными головками чтения и записи.

Добавлено через 8 минут
Цитата Сообщение от TheNooob Посмотреть сообщение
не лучше ли реализация на основе списка
Реализацию того же самого функционала на основе связного списка обычно можно расценивать как диверсию. Преимущество кольцевого буфера в том что он не требует перераспределения динамической памяти под элементы при их добавлении/извлечении, память распределяется один раз на старте использующей его системы. Используются такие буфера обычно в системах реального времени. Поэтому переполнение буфера (а тем более созданного с небольшим запасом)по условиям системы невозможно. Т.е. если под новый элемент в буфере нет места, то проблема не в том что места нет, а проблема в том что система не смогла отработать элементы очереди в заданный лимит времени и уже считается поломавшейся по определению системы реального времени.

Добавлено через 2 часа 11 минут
При использовании же кольцевого буфера в качестве журнала, считается что актуальными являются последние N записей, т.е. когда головка записи проходит по кругу она просто переписывает более старые записи которые уже неактуальны. Аналог - бортовой самописец (черный ящик). Лента рассчитана на продолжительность полета и закольцована. Т.е. данные накопленные в течение предыдущего полета просто переписываютсяя данными текущего полета, потому что в случае аварии данные предыдущего полета не актуальны, соответственно их можно просто переписать, что как экономит сам носитель так и исключает невозможность записи по причине "забыли заменить заполнившийся носитель при предполетной подготовке".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2018, 16:34
Помогаю со студенческими работами здесь

ReadFile не пишет в буффер
ReadFile не читает файл с ошибкой ERROR_NOACCESS. Я так понимаю что проблема в буфере, но не знаю что с ним делать :( пробовал обьявлять...

ADSP - Организовать циклический буфер в памяти данных и занести в него данные с инкрементом 1
Есть задание: Организовать цыклический буффер в памьяти данных и занести туду данные с инкрементом 1. Длина буффера: 16. Начальный...

Буффер пикселей и его сложение
У меня такой алгоритм: отрисовываю сцену, теоретически создаю буффер, наношу на него темный QUAD, потом осветляю его в просчитанных...

Не добавляются объекты в буффер обмена
здравствуйте, Ворд 2003 Буфер обмена открыт - справа от документа отображается лифт копирую слова по всплывающей подсказке видно, что...

Правильно прочитать буффер recv
Мне для игры нужно посмотреть куда делается запрос на удаленный адрес, перехват будет позже. Сейчас я просто хочу посмотреть что получаю в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru