На этом шаге мы рассмотрим первый алгоритм удаления звена дека.
Рассмотрим алгоритм удаления звена слева.
Рис.1. "Начальная" позиция
q = nd; nd = (*nd).sled;
Рис.2. "Настройка" указателей
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";} }
На следующем шаге мы рассмотрим алгоритм удаления дека справа.