Примеры практического задания №3
1) Создать обобщенный класс Array, предназначенный для хранения одномерного массива из N элементов. В классе должны быть реализованы следующие методы:
- конструктор, принимающий N в качестве аргумента;
- метод setItem для изменения произвольного элемента по индексу;
- метод getItem для получения произвольного элемента по его индексу;
- метод getCurrentItem для получения текущего элемента;
- метод nextItem для получения следующего элемента;
- метод prevItem для получения предыдущего элемента.
Для реализации методов getCurrentItem, nextItem, prevItem потребуется внутренний индекс текущего элемента (начальное значение 0). В методах nextItem, prevItem этот индекс должен смещаться в пределах допустимого диапазона (0…N-1). В случае выхода индекса за пределы диапазона методы nextItem, prevItem должны возвращать null. Написать главную функцию, демонстрирующую работу класса. В методах класса предусмотреть проверки на корректность передаваемых параметров.
2) Создать обобщенный класс Enum, предназначенный для хранения множества элементов. Отличие данного класса от обычного массива заключается в том, что в классе все элементы должны быть уникальны, без повторений. Например, новый элемент добавляется во множество, только если такого элемента там еще не было. В классе должны быть реализованы следующие методы:
- конструктор, принимающий N в качестве аргумента. Значение N – максимальное количество элементов во множестве;
- метод setItem для записи нового элемента во множество;
- метод getItems для получения всех элементов из множества;
- метод getIntersect для получения нового множества, представляющего собой пересечение множеств (элемент включается в результат, если он есть и в одном и во втором множестве одновременно);
- метод getUnion для получения нового множества, представляющего собой объединение множеств (элемент включается в результат, если он есть хотя бы в одном любом множестве);
- метод getDifferent для получения нового множества, представляющего собой разность множеств (элемент включается в результат, если он есть хотя бы в одном любом множестве, но не в двух множествах одновременно);
Написать главную функцию, демонстрирующую работу класса. В методах класса предусмотреть проверки на корректность передаваемых параметров.
3) Создать обобщенный класс CycleQueue, предназначенный для хранения элементов в виде структуры данных типа “циклическая очередь”. Эта структура данных представляет собой одномерный массив, заполнение элементов в котором всегда производится в конец, а извлечение элементов – с начала. Если в такую очередь поместить большее количество элементов, чем она способна принять, то элементы с начала очереди должны быть перезаписаны. При извлечении элементов из такой очереди всегда должен извлекаться самый первый из числа добавленных ранее (но не перезаписанных) элементов. В классе должны быть реализованы следующие методы:
- конструктор, принимающий N в качестве аргумента. Значение N – максимальное количество элементов в очереди;
- метод setItem для записи нового элемента в очередь;
- метод getItem для получения элемента из очереди;
- метод getCount для получения количества элементов в очереди;
- метод isEmpty, определяющий является ли очередь пустой.
Написать главную функцию, демонстрирующую работу класса. В методах класса предусмотреть проверки на корректность передаваемых параметров.
4) Создать обобщенный класс DoubleQueue, предназначенный для хранения элементов в виде структуры данных типа “двусторонняя очередь”. Эта структура данных представляет собой одномерный массив, заполнение элементов в котором может производиться как в конец, так и в начало. Извлечение элементов также может производиться как с начала, так и с конца очереди. В классе должны быть реализованы следующие методы:
- конструктор, принимающий N в качестве аргумента. Значение N – максимальное количество элементов в очереди;
- метод setItemStart для записи нового элемента в начало очереди;
- метод getItemStart для получения элемента из начала очереди;
- метод setItemEnd для записи нового элемента в конец очереди;
- метод getItemEnd для получения элемента из конца очереди;
- метод getCount для получения количества элементов в очереди.
Написать главную функцию, демонстрирующую работу класса. В методах класса предусмотреть проверки на корректность передаваемых параметров.
5) Создать обобщенный класс PriorityQueue, предназначенный для хранения элементов в виде структуры данных типа “приоритетная очередь”. Эта структура данных представляет собой одномерный массив, запись элементов в котором производиться с конца, а извлечение только с начала. При записи элементов указывается также его приоритет (целое число). При извлечении элементов в аргументах метода можно указывать приоритет, и тогда будет извлекаться первый элемент, имеющий указанный приоритет. В классе должны быть реализованы следующие методы:
- конструктор, принимающий N в качестве аргумента. Значение N – максимальное количество элементов в очереди;
- метод setItem для записи нового элемента в очередь (имеет 2 аргумента – элемент и приоритет);
- метод getItem для получения первого элемента из очереди;
- метод getItemPriority для получения первого элемента из очереди, но только имеющего указанный приоритет;
- метод getCount для получения количества элементов в очереди.
Написать главную функцию, демонстрирующую работу класса. В методах класса предусмотреть проверки на корректность передаваемых параметров.