- •Министерство образования и науки рф
- •История ооп
- •Основные приемы, используемые в работе
- •Описание основных функций программы
- •Шаблон класса
- •Структура элемента списка
- •Функция простого добавления элемента в список
- •Функция сортировки элементов
- •Функция вывода массива указателей и списков на экран
- •Функция добавления элемента по позиции
- •Функция удаления элемента с заданной позиции
- •Реализация выполненной работы
- •Заключение
Основные приемы, используемые в работе
В программе используется сложная схема организации списка. Имеющийся массив указателей ссылается на головы списков, в которых уже и представлена нужная нам информация в виде массивов. Списки ограничены и не могут превышать длины, заданной пользователем.
|
|
|
|
|
|
Рис.
3.1. Наглядный пример массива указателей
на головы списков
1
4
7
10
13![]()
2
5
8
11
14
3
6
9
12
15
Описание основных функций программы
Ниже будут представлены листинги кода основных функций программы, с пояснениями.
Шаблон класса
С помощью классов, легко сгруппировывать информацию об объекте воедино. Класс содержит в себе член-данные и член-функции.
|
template <class T> class Array { public: Array(); Array(int size, int MaxSize); ~Array(); void AddElem(); void AddElem(int position); void DelElem(int position); void SortALL(); void ShowAll(); private: ListElem<T> **Arr; bool IsListFull(int index); void Change(T a[], T first, T second); T FindMax(T a[], int max); void Sort(T b[], int max); int MaxCount; //Максимальная длина списка int CurSize; //Текущий размер односвязного списка int ArrSize; //Размер массива указателей int pointer; //Указатель на вставку элемента }; |
При создании класса, перегружаем конструкторы и деструкторы таким образом, чтобы они удовлетворяли нашему заданию, т.е. задавали начальный список либо пустым, с автоматически установленным максимальным размером списка, либо, чтобы начальный размер задавался пользователем, с нужным размером массива указателей, и, максимальной длиной списка.
Структура элемента списка
Для того, чтобы организовать список, представим один его элемент в виде структуры, с тремя полями, массивом данных, количеством элементов в массиве, и, указателем на следующий элемент.
|
template <class T> struct ListElem { T *objects; int countObj; //Количество объектов ListElem<T> *pNext; }; |
Функция простого добавления элемента в список
Данная функция добавляет элемент на первое свободное место в списке. Так же, если нам не хватает массива указателей, она память под ещё одну ячейку и, записывает элемент в неё.
|
template <class T> void Array<T>::AddElem() { if (CurSize==MaxCount) { pointer++; CurSize=0; } if (pointer==ArrSize) { Arr[pointer]=new ListElem<T>; Arr[pointer]=NULL; ArrSize++; } int count=0; cout<<"Enter count of elements="; cin>>count; if (count<=0) { cout<<"Non of elements"<<endl; return; } ListElem<T> *NewElem = new ListElem<T>; NewElem->countObj=count; NewElem->objects=new T[count]; for (int i = 0; i < count; i++) { cout<<"Enter element="; cin>>NewElem->objects[i]; } ListElem<T> *cur = Arr[pointer]; if (cur==NULL) { Arr[pointer]=NewElem; NewElem->pNext=NULL; } else { while(cur->pNext!=NULL) cur=cur->pNext; cur->pNext=NewElem; NewElem->pNext=NULL; } CurSize++; } |
