Воскресенье, 19.05.2024, 04:35Приветствую Вас Гость | RSS
IT Solutions
Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 407
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Блог


Главная » 2013 » Декабрь » 2 » Структуры данных: класс "Очередь"
19:49
Структуры данных: класс "Очередь"

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

 FIFO ( First In, First Out - Первым прибыл, первым вышел) - сокращённое название очереди как алгоритма.

 Очередь имеет свои ограничения:

1. Максимальный размер очереди определяется изначально неким числом max_size. В течение существования объекта класса количество его элементов не может быть больше этого max_size.

2. Нельзя удалить элемент, если его нет. Поэтому перед удалением всегда надо проверять,  очередь на наличие минимум одного элемента.

3. Допустим есть массив из "4" элементов. Извлечём элемент. Получим что слева есть пустое место, но при этом добавить элемент справа напрямую мы не можем. То есть при max_size=4, очередь может содержать только три элемента ( а после повторного извлечения  вообще только два).

Самым простым способом будет просто переместить после извлечения все элементы массива на одну ячейку влево. Причём это точно всегда будет работать. Но если у нас массив будет не из "4" элементов, а из 1 000 000, то от извлечения 50 000 элементов будет сильная потеря производительности, так как при каждый из 50 000 извлечений мы перемещаем примерно по 1 000 000 элементов массива.

Рассмотрим теперь алгоритм получше. 

Представим нашу очередь в виде замкнутого круга. Тогда, немного поигравшись с индексами, можем обойтись без перестановок элементов.

Как именно это выглядит? Представим очередь в магазин, в которой не очередь перемещается к продавцу ( дружно шагая всем составом), а продавец к очереди: то есть позиция начала очереди постоянно изменяясь стремится к концу очереди.

В таком случае следить нужно будет не только за концом очереди, но и за её началом. Как организовать круговую работу очереди?

Когда мы добавляем или извлекаем элементы, то очередь движется вправо. Слева же от начала очереди остаются ненужные ячейки массива, которые и нужно заполнять при вставке новыми элементами, если справа уже дошли до конца массива.

 Ниже приведена сложная реализация класса Queue с помощью шаблонов. Скачать исходники можно по ссылке ниже.

http://it-solutions.ucoz.ru/load/it/code_in_cpp/class_queue/10-1-0-4

Категория: С/C++ | Просмотров: 899 | Добавил: B@R_LOG | Теги: Queue, класс Очередь | Рейтинг: 5.0/34
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Категории раздела
Полезное [0]
Windows [0]
С/C++ [6]
SEO [0]
WEB [0]
Поиск
Друзья сайта
  • МЫ в "ВКонтакте"
  • Архив записей
    Календарь
    «  Декабрь 2013  »
    ПнВтСрЧтПтСбВс
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031
    Система Orphus