Шаг 8.
Операции над списками с заглавным звеном. Удаление звена (1-й случай)

    На этом шаге мы рассмотрим один из алгоритмов удаления звена.

    На этом шаге мы рассмотрим алгоритм удаления звена, расположенного после звена, на которое указывает ссылка Res.

    Воспользуемся схемами "до и после":

  1.     q = (*Res).sled;
    


    Рис.1. Определение местоположения удаляемого звена.

  2. Проверяем, не является ли звено, после которого нужно удалять, последним. В этом случае удалять нечего.
        if  (q!=NULL) //Если звено, после которого нужно удалять,
                                 // не является последним, то...
        { 
           (*Res).sled = (*(*Res).sled).sled;
    


    Рис.2. Исключение удаляемого элемента из списка

  3. Последняя тонкость: присоединение "кусочка" heap-области к списку свободной памяти:
          delete q;
    


    Рис.3. Возврат памяти в кучу

        }
    

    Приведем текст функции удаления:

void YDALE (node **Res)
// Удаление  звена, расположенного  после  
// звена, на которое указывает ссылка *Res.
{
  node *q;

  q = (**Res).sled;
  if (q!=NULL)
      // Если звено, после которого нужно удалять,
      // не является последним, то...
    { (**Res).sled = (*(**Res).sled).sled; delete q; }
  else
    cout<<"Звено с заданным элементом - последнее!\n";
}

    На следующем шаге мы продолжим рассматривать алгоритмы удаления звена.




Предыдущий шаг Содержание Следующий шаг