КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Удаление двунаправленного списка
Проверка пустоты двунаправленного списка Поиск элемента в двунаправленном списке Операция поиска элемента в двунаправленном списке реализуется абсолютно аналогично соответствующей функции для однонаправленного списка. Поиск элемента в двунаправленном списке можно вести: а) просматривая элементы от начала к концу списка; б) просматривая элементы от конца списка к началу; в) просматривая список в обоих направлениях одновременно: от начала к середине списка и от конца к середине (учитывая, что элементов в списке может быть четное или нечетное количество). //поиск элемента в двунаправленном списке bool Find_Item_Double_List(Double_List* Head, int DataItem){ Double_List *ptr; //вспомогательный указатель ptr = Head; while (ptr!= NULL){//пока не конец списка if (DataItem == ptr->Data) return true; else ptr = ptr->Next; } return false; }
Операция проверки двунаправленного списка на пустоту осуществляется аналогично проверки однонаправленного списка. //проверка пустоты двунаправленого списка bool Empty_Double_List(Double_List* Head){ if (Head!=NULL) return false; else return true; }
Операция удаления двунаправленного списка реализуется аналогично удалению однонаправленного списка. //освобождение памяти. выделенной под двунаправленный список 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. Вывести на экран каждое произведение и итоговую сумму. Алгоритм: 1) Создаём структуру. 2) Формируем список целых чисел. 3) Продвигаемся по списку: от начала к концу и от конца к началу в одном цикле, перемножаем данные, содержащиеся в соответствующих элементах списка. 4) Суммируем полученные результаты. 5) Выводим на печать Создание структуры, формирование списка и вывод на печать рассмотрены ранее. Приведем функции для реализации продвижения по списку в обоих направлениях и нахождения итоговой суммы. //поиск последнего элемента списка 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); }
Дата добавления: 2014-01-04; Просмотров: 1207; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |