Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба Богдик.doc
Скачиваний:
6
Добавлен:
11.06.2015
Размер:
137.73 Кб
Скачать

Иатэ нияу мифи

Курс ООП.

Отчёт по лабораторной работе №1.

«Очередь»

Выполнил: ст. группы ВТ1-Б11

Федоренко Б.В.

Проверил: преподаватель кафедры КССТ

Тельнов Виктор Петрович

г. Обнинск 2012

Постановка задачи

Разработать в MSVisualStudioпрограммное решение на языке Си, которое реализует динамическую структуру данных (контейнер) типа «Очередь». Каждый элемент контейнера содержит строки символов произвольной длины. В программном решении следует реализовать следующие операции над контейнером:

  • Создание и уничтожение контейнера

  • Поиск, добавление и извлечение элементов контейнера

  • Обход всех элементов контейнера в прямом и обратном направлениях (итератор)

  • Удаление из контейнера дублирующих элементов

  • Вычисление количества элементов в контейнере

  • Реверс контейнера

  • Сохранение контейнера в дисковом файле и восстановление контейнера из файла

Письменный отчет по работе должен содержать следующие разделы:

  1. Постановку задачи.

  2. Описание контейнера, как динамической структуры данных, в том числе:

  • Рисунки, на которых изображена структура данных и поясняются основные операции над ней;

  • Описание алгоритмов, которые используются при работе с контейнером;

  • Область применения данной структуры данных, её преимущества и недостатки в сравнии с другими известными структурами.

  1. Структуру папок разработанного проектного решения.

  2. Руководство пользователя (как пользоваться программой, возможные ошибки).

  3. Листинг разработанного авторского кода на языке Си. Код должен быть надлежащим образом структуирован и снабжен комментариями.

Очередь

Очередь – это динамическая упорядоченная структура данных, состоящая из элементов одного типа, с дисциплиной доступа к элементамFIFO(FirstIn–FirstOut). Каждый элемент содержит основное поле-указатель на объект и поле с указателем на следующий и предыдущий элемент. Элементы не всегда расположены в памяти последовательно.

Это позволяет сократить время обработки, так как объекты могут быть большими и сложными. Также для очереди характерна простота устройства. Размер очереди ограничен лишь объёмом памяти.

Очередь возможно реализовать разными способами:

Массив– этот способ представляет очередь в виде массива и двух целочисленных переменных start и end. Обычно start указывает на голову очереди, end — на элемент, который заполнится, когда в очередь войдёт новый элемент. При добавлении элемента в очередь в q[end]записывается новый элемент очереди, а end уменьшается на единицу. Если значение end становится меньше 1, то мы как бы циклически обходим массив и значение переменной становится равным n.

Извлечение элемента из очереди производится аналогично: после извлечения элемента q[start] из очереди переменная start уменьшается на 1. С такими алгоритмами одна ячейка из n всегда будет незанятой (так как очередь с n элементами невозможно отличить от пустой), что компенсируется простотой алгоритмов.

Преимущества данного метода: возможна незначительная экономия памяти по сравнению со вторым способом; проще в разработке.

Недостатки: максимальное количество элементов в очереди ограничено размером массива. При его переполнении требуется перевыделение памяти и копирование всех элементов в новый массив.

Связный список

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

Преимущества данного метода: размер очереди ограничен лишь объёмом памяти.

Недостатки: сложнее в разработке; требуется больше памяти; при работе с такой очередью память сильнее фрагментируется; работа с очередью несколько медленнее.

Недостатком очередиявляется медлительность работы, требует много памяти при построении на списке, память при работе с такой очередью сильно фрагментируется.

Преимуществом очереди, как динамической структуры данных, является простота добавления нового элемента и удаления любых других элементов. Многие операции можно свести к работе с указателями, при этом сами объекты остаются на месте.

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

Структура очереди