
- •Министерство образования и науки рф
- •История ооп
- •Основные приемы, используемые в работе
- •Описание основных функций программы
- •Шаблон класса
- •Структура элемента списка
- •Функция простого добавления элемента в список
- •Функция сортировки элементов
- •Функция вывода массива указателей и списков на экран
- •Функция добавления элемента по позиции
- •Функция удаления элемента с заданной позиции
- •Реализация выполненной работы
- •Заключение
Функция сортировки элементов
Сортируются массивы внутри списков, по возрастанию. Для этого были написаны несколько закрытых методов класса. Первая функция Changeменяет элементы местами, функцияFindMaxищет в массиве максимальный элемент, а функцияSortсортирует переданный в неё массив.
template <class T> void Array<T>::Change(T a[], T first, T second) { if (first == second) return; T i; i = a[second]; a[second] = a[first]; a[first] = i; }
template <class T> T Array<T>::FindMax(T a[], int max) { T imax = 0; for (int i = 0; i <= max; i++) { if (a[imax] < a[i]) imax = i; } return imax; }
template <class T> void Array<T>::Sort(T b[], int max) { int i1; for (int i = max - 1; i > 0; i--) { i1 = FindMax(b, i); Change(b, i, i1); } }
template <class T> void Array<T>::SortALL() { ListElem<T> *cur=0; for (int i = 0; i<ArrSize; i++) { cur = Arr[i]; while(cur!=NULL) { Sort(cur->objects,cur->countObj); cur=cur->pNext; } } } |
Функция вывода массива указателей и списков на экран
template <class T> void Array<T>::ShowAll() { ListElem<T> *cur=0; ListElem<T> *pcur=0; for (int i = 0; i<ArrSize; i++) { cout<<" <<< Next Pointer-> >>> \n"; cur = Arr[i]; pcur = Arr[i]; while(cur!=NULL) { cout<<"Elem="; for(int j=0; j<cur->countObj; j++) { cout<<cur->objects[j]<<" "; } cout<<"\n <<< Next list-> >>> \n"; cur=cur->pNext; } cout<<endl; cout<<endl; cout<<endl; cout<<endl; } } |
Функция добавления элемента по позиции
Элемент добавляется в указанную пользователем позицию, т.к. нумерация списков считается сквозной. Если позиция, которую указал пользователь слишком большая, то элемент просто добавляется в конец уже имеющегося списка.
template <class T> void Array<T>::AddElem(int position) { int index = 0; while (position>MaxCount) { index++; position-=MaxCount; } ListElem<T>*pcur=Arr[index]; if (pcur==NULL) { 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]; } Arr[index]=NewElem; NewElem->pNext=NULL; CurSize++; return; } if (index>=ArrSize) { AddElem(); return; } if (IsListFull(index)) { if(index==MaxCount) { ListElem<T> *pcur=0; for(pcur;pcur->pNext!=NULL;pcur=pcur->pNext); 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]; } pcur->pNext=NewElem; NewElem->pNext=NULL; CurSize++; return; } } if (position==1) { 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[index]; NewElem->pNext=cur->pNext; Arr[index]=NewElem; CurSize++; return; } else { 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[index]; ListElem<T>*pcur=Arr[index]; count=0; for(cur,pcur;cur!=NULL && count<position-2;) { count++; cur=cur->pNext; pcur=pcur->pNext; } if (cur==NULL) { pcur->pNext=NewElem; CurSize++; return; } else { NewElem->pNext=cur->pNext; pcur->pNext=NewElem; CurSize++; return; } } } |