Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx100 / Dokumentatsia_k_kursovoy_po_OOP.docx
Скачиваний:
58
Добавлен:
07.08.2013
Размер:
372.49 Кб
Скачать
    1. Функция удаления элемента с заданной позиции

В данной функции пользователь вводит позицию, с которой он хочет удалить элемент.

template <class T>

void Array<T>::DelElem(int position)

{

int ALL = MaxCount*ArrSize;

if (position>ALL || position<0)

{

cout<<"Нет элемента в этой позиции"<<endl;

system("pause");

return;

}

int index = 0;

while (position>MaxCount)

{

index++;

position-=MaxCount;

}

if (IsListFull(index) && position==MaxCount)

{

int curr=0;

ListElem<T> *cur=Arr[index];

if (cur->pNext!=NULL)

{

cur=cur->pNext;

}

ListElem<T> *pcur=0;

for (cur, pcur=Arr[index]; cur->pNext!=NULL;)

{

curr++;

cur=cur->pNext;

pcur=pcur->pNext;

}

if (cur->pNext==NULL)

{

delete []cur->objects;

delete cur;

pcur->pNext=NULL;

CurSize--;

}

}

else if (IsListFull(index) && position<MaxCount)

{

ListElem<T>*pcur=0;

ListElem<T>*cur=0;

ListElem<T>*temp=0;

int p=0;

pcur=cur=Arr[index];

for(cur;p!=position-1;p++)

cur=cur->pNext;

p=0;

for(pcur;p!=position-2;p++)

pcur=pcur->pNext;

temp=cur;

pcur->pNext=cur->pNext;

temp->pNext=NULL;

delete []temp->objects;

delete temp;

CurSize--;

}

else if (position==1)

{

ListElem<T>*cur=Arr[index];

ListElem<T>*pcur=Arr[index];

ListElem<T>*temp=Arr[index];

temp=temp->pNext;

pcur->pNext=cur->pNext->pNext;

temp->pNext=NULL;

delete []temp->objects;

delete temp;

CurSize--;

}

else

{

ListElem<T>*cur=Arr[index];

ListElem<T>*pcur=Arr[index];

int count=0;

for (cur=cur->pNext, pcur; count<position; count++)

{

if (cur==NULL)

cur=Arr[index++];

if (pcur==NULL)

pcur=Arr[index];

cur=cur->pNext;

pcur=pcur->pNext;

}

if (cur->pNext!=NULL)

{

temp=cur;

pcur->pNext=cur->pNext;

temp->pNext=NULL;

delete []temp->objects;

delete temp;

CurSize--;

}

}

}

  1. Реализация выполненной работы

Создадим изначально список с 2 ячейками массива указателей и, максимальной длиной списков 3. Добавим 8 элементов, чтобы гарантировано было переполнение массива. Пользователь вводит количество элементов и заполняет массив нужными ему элементами. В самом простом случае элементами будут числа от 1 до 9.

Рис. 5.2. Добавление элементов

И, видим, что всё корректно заполнилось, и выделилась новая ячейка памяти, для записи ещё трех элементов. Далее элементы выводятся на экран.

Рис. 5.3. Вывод полученного списка

Далее, усложним задачу, чтобы показать функцию сортировки элементов списка. Введем 9 элементов, но в каждом массиве будет разное количество данных. Первоначально неотсортированные данные показаны на следующем рисунке.

Рис. 5.4. Ввод элементов для сортировки

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

Рис. 5.5. Вывод отсортированных элементов списка

Далее протестируем функцию удаления элементов из нашего списка. Введем стандартный простой список, от 1 до 6 и удалим 2 элемента. В результате получился вот этот список.

Рис. 5.6. Удаление элементов из списка

И, наконец, функция добавления элементов в произвольное место в списке. Опять зададим список, но теперь добавим в него элементы по позициям. Вводим в консоль элементы, как обычно, с 1 до 6. Но, с помощью функций добавления в текущую позицию, пусть у нас должен будет вывестись список «1,3,2,4,6,5».

Рис. 5.7. Нарушение упорядоченности

Как и следовало ожидать, последовательность нарушилась, поскольку, во время добавления элементов, использовались функции обычной вставки, вперемешку с функциями вставки в конкретную позицию. В данном случае, в позиции 1, но это незаметно, а вот добавление элементов 3 и 6 в соответственные позиции 2 и 5, уже видимо нарушает порядок.

Соседние файлы в папке курсовая docx100