нециклическая:
вот есть массив размером 100
я туда запихал 10 значений
извлек самые старые 5 значений, но в массиве все равно 10 значений
потом запихал еще 20 значений
извлек опять 5 значений, они будут те же, а в массиве теперь 30 значений
и придет все к тому что массив переполнится
циклическая:
это когда извлеченные данные удаляются навсегда
я туда запихал 10 значений, извлек самые старые 5 значений и в массиве осталось 5 значений
теперь если я опять извлеку 5 значений, будут уже другие значения
Java
Помогите понять что такое циклическая и нециклическая очередь, вот как понял я: (я знаю что такое очередь)
Очередь всегда имеет голову и хвост и потому не может быть циклической. Но реализована очередь фиксированного размера может быть на кольцевом буфере, эмулируемом линейным массивом. И именно такую особенность реализации очереди (к самому понятию "очередь" не имеющую никакого отношения) малограмотные "специалисты" называют "циклической очередью".
Если ты делаешь очередь на кольцевом буфере фиксированного размера, то у тебя массив и два индекса: на голову и хвост очереди. И ты НЕ удаляешь, элементы, а лишь сдвигаешь индексы головы / хвоста - перезаписывая ранее записанные значения.
Если ты делаешь очередь на кольцевом буфере фиксированного размера, то у тебя массив и два индекса: на голову и хвост очереди. И ты НЕ удаляешь, элементы, а лишь сдвигаешь индексы головы / хвоста - перезаписывая ранее записанные значения.
const int size = 100; // размер буфера
int queue[size]; // буфер
int head = 0; // индекс головы заполненной части буфера
int tail = 0; // индекс сразу после хвоста заполненной части буфера
Добавление элемента value в хвост очереди: if ((tail + 1) % size == head) {
// Ошибка - буфер полностью заполнен
} else {
queue[tail] = value;
tail = (tail + 1) % size;
}
Извлечение элемента из головы очереди в value: if (head == tail) {
// Ошибка - буфер пуст
} else {
value = queue[head];
head = (head + 1) % size;
}
Данная схема позволит создать очередь длиной до size - 1 значений включительно.Вам надо использовать список, а не массив.
Тут либо сдвигать значения массива в удаленные ячейки, либо вообще не использовать массив, а использовать связанный список
Обычная очередь расширяется до любых размеров. А циклическая очередь - это просто удобный способ сделать очередь, которая не расширяет массив, в котором хранятся (или не создаёт новые элементы списка, ты понял короче). Циклическая очередь может переполнится, когда место в массиве заполнится
Похожие вопросы
- Помогите понять как решить задание по Java.
- Массивы Прочитал несколько статей по массивам, но так и не понял, как они работают. Объясните вкратце и понятно, плз
- Правильно ли я понял наследование?
- Не могу понять ОБЪЕКТЫ в языках программ. Объясните простыми словами
- В чем смысл задачи? Решение не надо, кода не надо, просто хочу понять, что нужно сделать, заранее спасибо
- Вот, чуть погодя, понял, что не все сайты предоставляют API, отсюда вопрос: как правильно парсить сайты? ¦|¦ JAVA
- Как понять побитовые операции? bitwise
- Как можно протестировать этот код и понять правильно он работает? JUnit 4. NetBeans.
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- C# Помогите написать генератор паролей на C# ,что бы он мог генерировать нужное кол-во паролей.