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

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

01.03.2018, 23:47. Показов 5674. Ответов 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
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
02.03.2018, 09:56
Цитата Сообщение от TheNooob Посмотреть сообщение
как можно закольцевать массив
Code
1
index = index % size
1
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
02.03.2018, 13:43
Кольцевые списки
1
 Аватар для Fulcrum_013
2083 / 1574 / 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru