double arrow

While ( Beg )

While (Beg)

While (Curr)

{

// Выводим информационную часть очередного элемента на экран

cout << Curr->Inf << “ “;

Curr = Curr->Adr;

}

cout << endl;

Удаление списка

После окончания работы со списком необходимо освободить от него динамическую память. Для этого можно использовать следующую функцию, имеющую единственный параметр-ссылку Beg – адрес начала списка:

void DeleteList (t_Item * &Beg)

{

t_Item *Next; // Указатель на следующий элемент списка

// Начинаем с начала списка

{

// Запоминаем адрес следующего элемента списка. Если этого не сделать,

// то после удаления элемента по адресу Beg негде будет взять адрес

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

Next = Beg->Adr;

// Удаляем первый элемент списка

delete Beg;

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

// следующего после удаленного (мы его запомнили чуть выше)

Beg = Next;

}

}

После окончания работы эта функция возвращает через свой параметр-ссылку Beg адрес 0 – список отсутствует (он перестал существовать).

Использование этой функции:

DeleteList (List);

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

Доступ к заданному элементу списка

Функция ListItem возвращает адрес элемента списка с индексом Index (индексация элементов в списке начинается с 0). Если элемент с заданным индексом в списке отсутствует, функция возвращает нулевой адрес. Параметр Beg задает адрес первого элемента списка (адрес начала списка). Третий параметр функции ErrMsg определяет надо ли выводить сообщение об ошибке при неправильно заданном индексе.

t_Item *ListItem(t_Item *Beg, unsigned Index, bool ErrMsg = true)

{

// Цикл заканчивается, когда

while (Beg && (Index --))

Beg = Beg->Adr;

if (ErrMsg &&!Beg)

cout << "Элемент списка отсутствует \n";

return Beg;

}

Добавление нового элемента к списку

t_Item *InsItem(t_Item * &Beg, unsigned Index)

{

t_Item * Item = new t_Item;

if (!Index ||!Beg)

{

Item->Adr = Beg;

Beg = Item;

return Item;

}

t_Item * PredItem = Beg;

-- Index;

while (PredItem->Adr && (Index --))

PredItem = PredItem->Adr;

Item->Adr = PredItem->Adr;

PredItem->Adr = Item;

return Item;

}

Определение количества элементов в списке

unsigned LengthList (t_Item * Beg)

{

unsigned Length = 0; // Счетчик элементов списка

// Начинаем с начала списка

{

// Увеличиваем счетчик элементов списка на единицу

++ Length;

// Перемещаемся на следующий элемент списка

Beg = Beg->Adr;

}

return Length;

}

Удаление элемента из списка

void DelItem(t_Item * &Beg, unsigned Index)

{

if (Index >= LengthList (Beg))

return;

t_Item * Item;

if (!Index)

{

Item = Beg->Adr;

delete Beg;

Beg = Item;

return;

}

Item = ListItem (Beg, Index - 1, 0);

t_Item * DItem = Item->Adr;

Item->Adr = DItem->Adr;

delete DItem;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: