Иатэ нияу мифи
Курс ООП.
Отчёт по лабораторной работе №1.
«Очередь»
Выполнил: ст. группы ВТ1-Б11
Федоренко Б.В.
Проверил: преподаватель кафедры КССТ
Тельнов Виктор Петрович
г. Обнинск 2012
Постановка задачи
Разработать в MSVisualStudioпрограммное решение на языке Си, которое реализует динамическую структуру данных (контейнер) типа «Очередь». Каждый элемент контейнера содержит строки символов произвольной длины. В программном решении следует реализовать следующие операции над контейнером:
Создание и уничтожение контейнера
Поиск, добавление и извлечение элементов контейнера
Обход всех элементов контейнера в прямом и обратном направлениях (итератор)
Удаление из контейнера дублирующих элементов
Вычисление количества элементов в контейнере
Реверс контейнера
Сохранение контейнера в дисковом файле и восстановление контейнера из файла
Письменный отчет по работе должен содержать следующие разделы:
Постановку задачи.
Описание контейнера, как динамической структуры данных, в том числе:
Рисунки, на которых изображена структура данных и поясняются основные операции над ней;
Описание алгоритмов, которые используются при работе с контейнером;
Область применения данной структуры данных, её преимущества и недостатки в сравнии с другими известными структурами.
Структуру папок разработанного проектного решения.
Руководство пользователя (как пользоваться программой, возможные ошибки).
Листинг разработанного авторского кода на языке Си. Код должен быть надлежащим образом структуирован и снабжен комментариями.
Очередь
Очередь – это динамическая упорядоченная структура данных, состоящая из элементов одного типа, с дисциплиной доступа к элементамFIFO(FirstIn–FirstOut). Каждый элемент содержит основное поле-указатель на объект и поле с указателем на следующий и предыдущий элемент. Элементы не всегда расположены в памяти последовательно.
Это позволяет сократить время обработки, так как объекты могут быть большими и сложными. Также для очереди характерна простота устройства. Размер очереди ограничен лишь объёмом памяти.
Очередь возможно реализовать разными способами:
Массив– этот способ представляет очередь в виде массива и двух целочисленных переменных start и end. Обычно start указывает на голову очереди, end — на элемент, который заполнится, когда в очередь войдёт новый элемент. При добавлении элемента в очередь в q[end]записывается новый элемент очереди, а end уменьшается на единицу. Если значение end становится меньше 1, то мы как бы циклически обходим массив и значение переменной становится равным n.
Извлечение элемента из очереди производится аналогично: после извлечения элемента q[start] из очереди переменная start уменьшается на 1. С такими алгоритмами одна ячейка из n всегда будет незанятой (так как очередь с n элементами невозможно отличить от пустой), что компенсируется простотой алгоритмов.
Преимущества данного метода: возможна незначительная экономия памяти по сравнению со вторым способом; проще в разработке.
Недостатки: максимальное количество элементов в очереди ограничено размером массива. При его переполнении требуется перевыделение памяти и копирование всех элементов в новый массив.
Связный список –
Второй способ основан на работе с динамической памятью. Очередь представляется в качестве линейного списка, в котором добавление/удаление элементов идет строго с соответствующих его концов.
Преимущества данного метода: размер очереди ограничен лишь объёмом памяти.
Недостатки: сложнее в разработке; требуется больше памяти; при работе с такой очередью память сильнее фрагментируется; работа с очередью несколько медленнее.
Недостатком очередиявляется медлительность работы, требует много памяти при построении на списке, память при работе с такой очередью сильно фрагментируется.
Преимуществом очереди, как динамической структуры данных, является простота добавления нового элемента и удаления любых других элементов. Многие операции можно свести к работе с указателями, при этом сами объекты остаются на месте.
Очередь рационально использовать там, где требуется хранить не слишком большое количество однотипных данных (в связи с медлительностью работы), если при этом предполагается частое удаление и добавление новых объектов.
Структура очереди