Bool List::ItemExists ( unsigned Index ) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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;                    // Возвращаем адрес выделенного элемента

}

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



Поделиться:


Последнее изменение этой страницы: 2021-09-26; просмотров: 34; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.161.132 (0.014 с.)