Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Void List::Create ( unsigned N )

// Удаляет существующий список и создает новый список из N элементов

{

if (Count) // Если в списке есть элементы, то удаляем их

            Clear ();

for (unsigned i = 1; i <= N; ++ i) // Добавляем к пустому списку N элементов

            AddItem (); // Добавляем в конец списка новый элемент

}

// ----------------------------------------------

Void List:: Clear ()

// Очищает динамическую память от списка из Count элементов

{

unsigned N = Count;

for (unsigned i = 1; i <= N; ++ i) // N раз удаляем из списка первый

                                                          // элемент (элемент с индексом 0)

            DelItem (0);

}

// ----------------------------------------------

Unsigned List:: ItemCount ()

//Возвращает количество элементов в списке

{

return Count;

}

// ----------------------------------------------

Bool List::ItemExists (unsigned Index)

// Проверка наличия элемента с индексом Index (значения индекса от 0 до Count - 1)

{

if (Index >= Count) // Если значение индекса некорректное

{

           // Выводим сообщение об ошибке

            cout << "Элемент с индексом " << Index << " отсутствует!\ n";

            return 0; // Возвращаем значение false

}

return 1; // Элемент с заданным индексом существует. Возвращаем значение true

}

// ----------------------------------------------

t_Item *List::Item (unsigned Index)

// Функция возвращает адрес элемента с индексом Index (значения индекса

// от 0 до Count - 1). Если такого элемента нет, выводится сообщение об

// ошибке и функция возвращает нулевой адрес

{

if (! ItemExists (Index)) // Если элемент с заданным индексом

                                                // отсутствует, выводим сообщение об ошибке,

            return 0;                 // возвращаем нулевой адрес

if (Index == Count – 1)        // Если нужен последний элемент списка,

            return End;            // возвращаем адрес последнего элемента

// Начиная с начала списка перемещаемся по списку до элемента

// с заданным индексом

t_ Item * Curr = Items;        // Делаем адрес очередного элемента равным

                                                // адресу первого элемента

while (Index --)                  // Цикл продолжается Index раз

            Curr = Curr-> Adr; // Делаем адрес очередного элемента

                                                // равным адресу следующего элемента

return Curr;           // Возвращаем адрес элемента с заданным индексом

}

// ----------------------------------------------

T_Inf List::GetItem (unsigned Index)

// Функция возвращает информационную часть элемента с индексом Index,

// если такой элемент имеется. Если такого элемента нет, выводится

// сообщение об ошибке, и функция возвращает значение

// информационной части равное DefVal

{

t_ Item * Curr = Item (Index); // Получаем адрес элемента с заданным индексом

if (! Curr)                                // Если адрес нулевой

            return DefVal;             // Возвращаем значение по умолчанию

return Curr-> Inf;                   // Возвращаем значение информационной части

}

// ----------------------------------------------

Void List::PutItem (unsigned Index, t_Inf Val)

// Функция устанавливает значение информационной части элемента

// с индексом Index, если такой элемент имеется, в значение Val.

// Если такого элемента нет, выводится сообщение об ошибке,

// а информационная часть элемента остается без изменения

{

t_ Item * Curr = Item (Index); // Получаем адрес элемента с заданным индексом

if (! Curr)                                 // Если адрес нулевой

            return;                           // Выходим из функции

Curr-> Inf = Val;                     / / Информационной части найденного элемента

                                                       // присваиваем значение Val

}

// ----------------------------------------------

Void List::AddItem (t_Inf Val)

// Функция добавляет новый элемент в конец списка и

// делает значение информационной части этого элемента равной Val

{

t_ Item * NewItem = new t_ Item;    // NewItem - адрес нового созданного

                                                         // элемента списка

NewItem-> Inf = Val;                      / / Присваиваем информационной части этого

                                                          // элемента значение Val

NewItem-> Adr = 0;                     // Поскольку элемент добавляется в конец списка,

                                                          // в его адресную часть заносим 0

if (Count)                                      // Если в списке уже были эементы (Count > 0),

            End-> Adr = NewItem;     // адресной части последнего элемента

                                                           // присаиваем адрес нового элемента

else                                                 // Иначе (Count = 0 - список был пуст)

            Items = NewItem;             // делаем адрес первого элемента списка

                                                           // равным адресу нового элемента

End = NewItem;                           // Теперь адрес последнего элемента списка

                                                           // делаем равным адресу добавленного элемента

++ Count;                                     // Увеличиваем количество элементов списка на 1

}

// ----------------------------------------------

t_Item *List::ExtractItem (unsigned Index)

// Функция выделяет элемент списка с индексом Index, исключая его из списка,

// но не удаляет его из динамической памяти. Возвращает адрес

// выделенного элемента, если такой элемент есть. Если такого элемента нет –

// выводит сообщение об ошибке  и возвращает нулевой адрес

{

if (! ItemExists (Index))   // Если элемент с заданным индексом отсутствует,

                                                   // выводим сообщение об ошибке,

            return 0;                    // возвращаем нулевой адрес

t_ Item * DItem,                     // Переменная для адреса выделяемого элемента

            * Pred = 0;                      // Переменная для адреса элемента

                                                  // предшествующего выделяемому

if (Index == 0)                    // Если выделяется первый элемент списка,

{

            DItem = Items;        // адрес выделяемого элемента делаем равным адресу

                                                  // первого элемента списка,

            Items = Items-> Adr;   // изменяем адрес первого элемента равным адресу

                                                  // следующего элемента

}

else                                        // Иначе (выделяется не первый элемент списка)

{

            Pred = Item (Index – 1); // находим адрес элемента, который расположен

                                                           // перед удаляемым,

            DItem = Pred-> Adr;         // делаем адрес выделяемого элемента равным

                                                           // адресной части предыдущего,

            Pred-> Adr = DItem-> Adr; // и в адресную часть предыдущего элемента

                                                           // записывем адрес элемента, следующего

                                                      // за выделяемым (тем самым исключаем

                                                          //  выделяемый элемент из списка).

}

if (DItem == End)                  // Если выделяемый элемент является

                                                 // последним элементом списка,

            End = Pred;           // корректируем адрес последнего элемента, делая его

                                                 // равным адресу предыдущего

-- Count;                             // Уменьшаем количество элементов в списке на 1

return DItem;                    // Возвращаем адрес выделенного элемента

}

// ----------------------------------------------

Void List::DelItem (unsigned Index)

// Функция удаляет элемент с индексом Index из списка и освобождает

// от него динамическую память. Если такого элемента нет, то выводится

// сообщение об ошибке, а список остается без изменений

{

t_ Item * DItem = ExtractItem (Index); // Выделяем заданный элемент из списка

if (DItem)                       // Если адрес выделенного элемента не равен 0,

            delete DItem;               // освобождаем от него динамическую память

}

// ----------------------------------------------

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...