Двунаправленый список, удаление элемента. ошибка! - C (СИ)
Формулировка задачи:
Подскажите пожалуйста, где ошибка! Удаление элемента в двунаправленном списке (допустим, что список не пустой, и в нем есть указанный элемент в количестве одной штуки ). При любых введенных данных у меня удаляется первый элемент.
Spis *del; t=begin; printf("Bвдите элемент для удаления: "); scanf("%d",&a); while (t!=NULL){ if (t->info==a) { printf("Элемент %d найден. \n", t->info); del=t; break; } t=t->Next; }; //******* удаление элемента *******> if (del->Prev==NULL) { //если элемент первый begin=begin->Next; begin->Prev=NULL; } else if(del->Next==NULL) { // если элемент последний end=end->Prev; end->Next=NULL; } else { // если элемент в середине списка (del->Prev)->Next=del->Next; (del->Next)->Prev=del->Prev; free(del); } //список после удаления элемента t=begin; while (t!=NULL){ printf(" %d ", t->info); t=t->Next; }
Решение задачи: «Двунаправленый список, удаление элемента. ошибка!»
textual
Листинг программы
void Delete(struct Spis* del) { if(del>Prev) del>Prev->Next = del->Next; if(del>Next) del>Next->Prev = del->Prev; free(del); }
Объяснение кода листинга программы
- В данной функции есть ошибка, которая приводит к неопределенному поведению.
- Функция предназначена для удаления элемента из двунаправленного списка.
- При удалении элемента, нужно обновить ссылки на предыдущий и следующий элементы.
- Если удаляемый элемент является первым или последним в списке, то нужно обновить ссылки на заголовок списка.
- Для удаления элемента, используется функция free().
- В данной реализации двунаправленного списка, не предусмотрено добавление элементов в список.
- В данной реализации двунаправленного списка, не предусмотрено получение элементов из списка.
- В данной реализации двунаправленного списка, не предусмотрено изменение содержимого элементов списка.
- В данной реализации двунаправленного списка, не предусмотрено циклация по элементам списка.
- В данной реализации двунаправленного списка, не предусмотрено удаление всех элементов списка.
- Для работы с двунаправленным списком, нужно реализовать следующие функции: Create(), Insert(), Delete(), Get(), Set(), Prev(), Next().
- Для корректной работы двунаправленного списка, нужно реализовать проверку на ошибки и обработку исключений.
- Для корректной работы двунаправленного списка, нужно использовать подходящую структуру данных для хранения элементов списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для добавления, удаления и получения элементов списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для циклации по элементам списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для удаления всех элементов списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для обновления ссылок на предыдущий и следующий элементы при добавлении, удалении и получении элементов списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для обновления ссылок на предыдущий и следующий элементы при циклации по элементам списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для обновления ссылок на предыдущий и следующий элементы при удалении всех элементов списка.
- Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для проверки корректности ссылок на предыдущий и следующий элементы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д