Двунаправленый список, удаление элемента. ошибка! - 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);
}

Объяснение кода листинга программы

  1. В данной функции есть ошибка, которая приводит к неопределенному поведению.
  2. Функция предназначена для удаления элемента из двунаправленного списка.
  3. При удалении элемента, нужно обновить ссылки на предыдущий и следующий элементы.
  4. Если удаляемый элемент является первым или последним в списке, то нужно обновить ссылки на заголовок списка.
  5. Для удаления элемента, используется функция free().
  6. В данной реализации двунаправленного списка, не предусмотрено добавление элементов в список.
  7. В данной реализации двунаправленного списка, не предусмотрено получение элементов из списка.
  8. В данной реализации двунаправленного списка, не предусмотрено изменение содержимого элементов списка.
  9. В данной реализации двунаправленного списка, не предусмотрено циклация по элементам списка.
  10. В данной реализации двунаправленного списка, не предусмотрено удаление всех элементов списка.
  11. Для работы с двунаправленным списком, нужно реализовать следующие функции: Create(), Insert(), Delete(), Get(), Set(), Prev(), Next().
  12. Для корректной работы двунаправленного списка, нужно реализовать проверку на ошибки и обработку исключений.
  13. Для корректной работы двунаправленного списка, нужно использовать подходящую структуру данных для хранения элементов списка.
  14. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для добавления, удаления и получения элементов списка.
  15. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для циклации по элементам списка.
  16. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для удаления всех элементов списка.
  17. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для обновления ссылок на предыдущий и следующий элементы при добавлении, удалении и получении элементов списка.
  18. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для обновления ссылок на предыдущий и следующий элементы при циклации по элементам списка.
  19. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для обновления ссылок на предыдущий и следующий элементы при удалении всех элементов списка.
  20. Для корректной работы двунаправленного списка, нужно использовать подходящий алгоритм для проверки корректности ссылок на предыдущий и следующий элементы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы