Программирование на языке высокого уровня. Марапулец Ю.В. - 66 стр.

UptoLike

Составители: 

//то корректировка указателей на предыдущий и последующий элементы
(KeyX->Prev)->Next = KeyX->Next;
(KeyX->Next)->Prev = KeyX->Prev;
}
free(KeyX); // Удаляем элемент
return true;
}
return false;
}
Сортировка связанного списка заключается в изменении связей между элементами.
Алгоритм состоит в том, что исходный список просматривается, и каждый новый эле-
мент вставляется в список на место, определяемое значением его ключа. Решение такой
задачи демонстрируется функцией SortElement():
void SortElement(X **BeginX, X **EndX, int A)
{
X *NewElement;
NewElement = (X *)malloc(sizeof(X)); // Выделяем память
NewElement->Value = A;
X * Element = *BeginX; // Встаем на начало списка
while (Element) // Просматриваем
{
if (A < Element->Value) //Если значение меньше текущего
{ // Заносим перед текущим элементом
NewElement->Next = Element;
if (Element == *BeginX)
{ // В начало списка
NewElement->Prev =0;
*BeginX = NewElement;
}
else
{ // Или в середину списка
(Element->Prev)->Next = NewElement;
NewElement->Prev = Element->Prev;
}
Element->Prev = NewElement;
return;
}
Element = Element->Next;
}
NewElement->Next =0; //Заносим в конец списка
NewElement->Prev = *EndX;
(*EndX)->Next = NewElement;
*EndX = NewElement;
}
В заключение рассмотрения линейных списков рассмотрим пример использования
функций. В этом примере первоначально создается один элемент со значением 0; далее
добавляются в
конец списка элементы со значениями от 3 до 7; после этого вставляется
элемент со значением 1 после элемента со значением 0; удаляется элемент со значением
6 и затем вставляется элемент со значением 2 согласно сортировки по возрастанию.
66
//то корректировка указателей на предыдущий и последующий элементы
                       (KeyX->Prev)->Next = KeyX->Next;
                       (KeyX->Next)->Prev = KeyX->Prev;
               }
               free(KeyX); // Удаляем элемент
               return true;
       }
       return false;
}

     Сортировка связанного списка заключается в изменении связей между элементами.
Алгоритм состоит в том, что исходный список просматривается, и каждый новый эле-
мент вставляется в список на место, определяемое значением его ключа. Решение такой
задачи демонстрируется функцией SortElement():

void SortElement(X **BeginX, X **EndX, int A)
{
       X *NewElement;
       NewElement = (X *)malloc(sizeof(X)); // Выделяем память
       NewElement->Value = A;
       X * Element = *BeginX; // Встаем на начало списка
       while (Element) // Просматриваем
       {
              if (A < Element->Value) //Если значение меньше текущего
              { // Заносим перед текущим элементом
                      NewElement->Next = Element;
                      if (Element == *BeginX)
                      { // В начало списка
                              NewElement->Prev =0;
                              *BeginX = NewElement;
                      }
                      else
                      {        // Или в середину списка
                              (Element->Prev)->Next = NewElement;
                              NewElement->Prev = Element->Prev;
                      }
                      Element->Prev = NewElement;
                      return;
              }
              Element = Element->Next;
       }
       NewElement->Next =0; //Заносим в конец списка
       NewElement->Prev = *EndX;
       (*EndX)->Next = NewElement;
       *EndX = NewElement;
}

     В заключение рассмотрения линейных списков рассмотрим пример использования
функций. В этом примере первоначально создается один элемент со значением 0; далее
добавляются в конец списка элементы со значениями от 3 до 7; после этого вставляется
элемент со значением 1 после элемента со значением 0; удаляется элемент со значением
6 и затем вставляется элемент со значением 2 согласно сортировки по возрастанию.

                                          66