Удаление двунаправленного списка
Операция удаления двунаправленного списка реализуется аналогично удалению однонаправленного списка. //освобождение памяти, выделенной под двунаправленный список void Delete_Double_List(Double_List* Head){ if (Head!= NULL){ Delete_Double_List(Head->Next); delete Head; } } Пример 1. N -натуральных чисел являются элементами двунаправленного списка L, вычислить: X1*Xn+X2*Xn-1+...+Xn*X1. Вывести на экран каждое произведение и итоговую сумму. Алгоритм:
Создание структуры, формирование списка и вывод на печать рассмотрены ранее. Приведем функции для реализации продвижения по списку в обоих направлениях и нахождения итоговой суммы. //поиск последнего элемента списка Double_List* Find_End_Item_Double_List(Double_List* Head){ Double_List *ptr; //дополнительный указатель ptr = Head; while (ptr->Next!= NULL){ ptr = ptr->Next; } return ptr; }
//итоговая сумма произведений void Total_Sum(Double_List* Head) { Double_List* lel = Head; Double_List* mel = Find_End_Item_Double_List(Head); int mltp,sum=0; while(lel!= NULL) { mltp = (lel->Data)*(mel->Data);//умножение элементов printf("\n\n%d * %d = %d",lel->Data,mel->Data,mltp); sum = sum + mltp;//суммирование произведений lel = lel->Next; //идем по списку из первого элемента в последний mel = mel->Prior; //идем по списку из последнего элемента в первый } printf("\n\n Итоговая сумма равна %d",sum); }
|