Шаг 37.
Удаление звена из дека слева

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

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

  1. Пусть уже построен дек на базе двунаправленного списка без заглавного звена:


    Рис.1. "Начальная" позиция

  2. Сохраним адрес удаляемого элемента и "настроим" указатель начала дека:
        q = nd;
        nd = (*nd).sled;
    


    Рис.2. "Настройка" указателей

  3. Возвратим память в кучу:
        delete q;
    


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

    Запишем по описанному алгоритму функцию на языке C++:

void DelLeft (node **nd, node **kd,int *el)
// Удаление звена из дека слева с помещением элемента
//  удаляемого звена в переменную el.
// *nd - указатель на начало дека.
// *kd - указатель на конец дека.
{
  node *q;
  if ((**nd).sled!=NULL)
    { q = *nd; *el =(*q).elem; *nd = (**nd).sled; (**nd).pred = NULL; delete q;}
  else
  { //В деке находится один элемент.
     q = *nd; *el =(*q).elem; *nd = *kd = NULL; 
    delete q; cout<<"Дек пуст!\n";}
}

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




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