Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаления значения в списку. Бага 
:(
    Опции темы
feodorv
Дата 30.10.2015, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(sswt @  30.10.2015,  12:09 Найти цитируемый пост)
а можете  пример скинуть реализации этой функции?
Код

// Изымает элемент item из двусвязного списка list
//
// Память, выделенная под item, не высвобождается (так как это не собачье дело данной функции, 
//   item в дальнейшем может использоваться где-нибудь ещё в коде)
//
// Предполагается, что item != NULL и list != NULL, и что item принадлежит list
//
void listRemove( struct list *list, struct item *item)
{
   if( item->prev == NULL )
   { 
      if( (list->head = item->next) == NULL )
         list->tail = NULL;
      else
         list->head->prev = NULL;
   }
   else
   { 
      if( (item->prev->next = item->next) != NULL )
         item->next->prev = item->prev;
      else
         list->tail = item->prev;
   }
}



Цитата(sswt @  30.10.2015,  12:09 Найти цитируемый пост)
Если есть в интернете

Ну, это я оставлю без коментариев)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 30.10.2015, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

// Проверки на то,что node принадлежит list тоже нет.
// Предполагается, что list огранизован правильно (в этом случае код feodorv делает тоже самое)
// Можно разработать отладочный режим (#ifdef DEBUG_DOUBLY_LINKED_LIST),
// в котором в Node_t добавляется поле list,
// а в DoublyLinkedList_t - счетчик элементов count
void RemoveNode(DoublyLinkedList_t* list, Node_t* node)
{
    if (node == nullptr)
        return;
    Node_t* prevNode = node->prevNode;
    Node_t* nextNode = node->nextNode;
    if(nextNode != nullptr)
        nextNode->prevNode = prevNode;
    else
        list->tail = prevNode;
    if(prevNode != nullptr)
        prevNode->nextNode = nextNode;
    else
        list->head = nextNode;
    free(node);
}

void test(void) {
    DoublyLinkedList_t* list = CreateDoublyLinkedList();
    InsertLast(list, 1);
    InsertLast(list, 2);
    InsertLast(list, 3);
    InsertLast(list, 4);
    // D отладочном режиме:
    // В PrintForward() добавить проверку, что list->tail указывет на последний напечатанный элемент
    // и если не совпадает, печатать предупреждение.
    // Также поступать если node->nextNode->prevNode != node и head->prevNode != nullptr
    // и проверять счетчик на соответствие числу элементов в списке и node->list == list
    // если соответсвующие поля были добавлены
    PrintForward(list); // -> 1 2 3 4
    // Провераям удаление nullptr
    RemoveNode(list, nullptr);
    PrintForward(list); // -> 1 2 3 4
    // Проверяем удаление в середине
    RemoveNode(list, list->head->nextNode);
    PrintForward(list); // -> 1 3 4
    RemoveNode(list, list->head);
    // Проверяем удаление первого элемента
    PrintForward(list); // -> 3 4
    // Проверяем удаление последнего элемента
    RemoveNode(list, list->tail);
    PrintForward(list); // -> 3
    // Проверяем удаление с очищением списка
    RemoveNode(list, list->head);
    PrintForward(list); // -> (пустой список)
}


Это сообщение отредактировал(а) math64 - 30.10.2015, 13:15
PM   Вверх
sswt
Дата 30.10.2015, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 22.9.2015

Репутация: нет
Всего: нет



спасибо

Это сообщение отредактировал(а) sswt - 30.10.2015, 13:28
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.