Удаление двунаправленного списка
Операция удаления двунаправленного списка реализуется аналогично удалению однонаправленного списка.
//освобождение памяти. выделенной под двунаправленный список
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);
}
Дата добавления: 2015-08-14; просмотров: 708;