Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Удаление элемента из двусвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ считывание координан из файла http://www.cyberforum.ru/cpp-beginners/thread961066.html
Добрый день,возникла проблема,нужно чтобы подпрограмма считывала координаты отрезка в пространстве (x,y,z) из файла,где будут находится координаты всех отрезков
C++ Массивы. Как перевести мат. формулу в функцию с++ в виде кода Здравствуйте, всем! Помогите объявить функцию в виде массива(3-х мерная матрица), где элементы массива равны согласно картине которую выкладываю. Нужно пробежаться по элементам матрицы в массиве,... http://www.cyberforum.ru/cpp-beginners/thread961048.html
C++ Напечатать в столбик первые слова всех предложений текста
Напечатать в столбик первые слова всех предложений текста.
C++ Переделать задачу под бинарные файлы
Дан файл, компонентами которого являются массивы действительных чисел. Вычислить для каждого массива число отрицательных элементов. Записать в другой файл каждое из этих чисел. Сделал для...
C++ Как заполнить массив рандом? http://www.cyberforum.ru/cpp-beginners/thread960957.html
Как заполнить масив рандом в c++ Visual studio 2010 ?
C++ Найти количество четных и нечетных цифр в целом положительном шестизначном числе С++ для меня в новинку..и где тут что не так понять не могу.. подскажите, пожалуйста Задача звучит так: найти количество четных и нечетных цифр в целом положительном шестизначном числе, которое... подробнее

Показать сообщение отдельно
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
24.09.2013, 12:44
ну во первых при удалении нет корректировки удаления первого не единственного элемента. т.е. как только ты удаляешь верхушку со списком будет полная амба.
вот исправленный кусок кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
while(tmp!=NULL)
{
    if(example.compare(tmp->name)==0)
        {   
        if(tmp->next)
        {
            tmp->next->prev=tmp->prev;
        }
        else 
        {
            tail=tmp->prev;
            if (tail) tail->next=NULL;
        }   
        if (tmp->prev)
        {
            tmp->prev->next=tmp->next;
        }
        else
        {
            head=tmp->next;
            if (head) head->prev=NULL;
        }
    
    delete(tmp);
    tmp=NULL;
        result=1;
    }
        else
    {
        tmp=tmp->next;
    }
 
}
по идее так

Добавлено через 8 минут
более того, если я не ошибаюсь то из за натыканых бреаков (что не есть гуд) фактического освобождения памяти не происходит, т.к. при любом исходе бреак выкидывает из цикла до команды делит.
И более того у вас двунаправленный список. А при удалении вы не корректируете ссылку на предыдущий элемент, т.о. при любом удалении по сути получается каша а не список
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru