Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labs-Programming.doc
Скачиваний:
23
Добавлен:
06.09.2019
Размер:
574.98 Кб
Скачать

Очереди

Очередь – это контейнер, работающий по принципу First In – First Out. В нем возможно удаление только того элемента, который был добавлен раньше всех.

Очередь поддерживает четыре операции – добавить элемент, посмотреть на последний добавленный элемент, посмотреть на добавленный раньше всех элемент, удалить добавленный раньше всех элемент.

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

При реализации очереди на базе массива возникает следующая проблема. Если первый в очереди элемент хранить как первый элемент массива, время извлечения первого элемента будет равно O(N) за счет необходимости сдвига оставшихся элементов. Это неприемлемо, поэтому нужно будет не сдвигать элементы, а изменять специальный индекс, запоминающий положение начала очереди в массиве.

При этом память от начала массива до начала очереди не должна пустовать. Если для нового элемента нет места в конце массива, но есть свободные места в начале – его нужно разместить в начале (мысленно замкнуть массив в кольцо). Если позже возникнет необходимость в росте массива (из-за увеличения числа элементов очереди), важно корректно перенести элементы в расширенный массив.

Описание работы с указателями в языке программирования C++

См. лабораторную работу №1.

Описание работы с классами в языке программирования C++

Класс в C++ - это определяемый пользователем тип данных. Переменную, типом которой является класс, называют объектом (экземпляром) класса.

Пользователь может задать поля данных класса и методы класса (member functions). Поля данных (у каждого из которых есть тип) – это значения, которые объект класса должен помнить внутри себя. Методы – это операции, которые могут быть выполнены с объектом класса. Таким образом, как и для любого типа данных [1], для класса определяется его способ хранения в памяти и набор операций. При этом программист может самостоятельно определить и то, и другое.

Например, может существовать класс комплексного числа, выглядящий примерно так:

class TComplex

{

public: //Эти операции могут быть вызваны снаружи, из-за пределов класса

TComplex( double a , double b );

//Это конструктор – специальный метод, создающий из параметров

//переменную данного класса.

TComplex operator+( TComplex_ other );

//Это оператор (специальный вид метода) сложения.

//Он прибавляет к данному комплексному числу комплексное число other

//и возвращает комплексное число как результат.

void Read();

//Это объявлен метод. Он не требует параметров и

//возвращает пустой результат.

private: //То, что ниже – доступно только самому классу.

//Поля данных – TComplex хранит внутри два вещественных числа.

double Real; //действительная часть

double Imag; //мнимая часть

};

//Реализуем конструктор, т.е. определяем, как из двух чисел создается //TComplex

TComplex::TComplex( double a , double b )

{

//Вот так – первое число записывается в поле Real, второе – в поле Imag.

Real = a;

Imag = b;

}

//Реализуем сложение. Как данное число прибавляет к себе другое число //(other)?

TComplex TComplex::operator+( TComplex_ other )

{

//Создаем переменную типа Complex. Записываем в ее поле Real сумму

//своего поля Real и поля Real переданного параметра, Imag –аналогично.

TComplex res( 0 , 0 );

res.Real = Real + other.Real;

res.Imag = Imag + other.Imag;

//Вернем эту переменную в качестве результата операции

return res;

}

//Что делает комплексное число, если его

//попросят сделать операцию Read?

void TComplex::Read()

{

//Вот что делает – читает с экрана два вещественных числа, записывая их

//в поля Real и Imag.

scanf ( “%f %f” , &Real , &Imag );

}

void main()

{

TComplex a( 2 , 3 );

//Создали переменную типа TComplex. Конструируем ее из двух чисел -

//у нас есть такой конструктор, поэтому мы можем это сделать.

TComplex b( 0 , 0 );

b.Read();

//Применим к переменной b операцию Read (как мы знаем, она в этом

//случае считает с экрана два вещественных числа – действительную

//и мнимую часть.)

TComplex c = a + b;

//Этот код вызовет у комплексного числа a оператор сложения, передав

//ему в качестве параметра число b. Результат будет записан в c.

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]