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

двусвязный список - функция удаления - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
m9c1k
31 / 6 / 1
Регистрация: 07.06.2010
Сообщений: 75
09.06.2010, 18:32     двусвязный список - функция удаления #1
Подскажите,где ошибка. Функция удаляет книгу из списка по названию автора...

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
void DeleteBook(List& theList) // функция удаления заданной позиции
{
    char s[80];
    Book* cur = theList.itsFirst;
    Book* cur;
    Book* temp;
    printf( " Enter the auter for deleted Book: \n");
        scanf("%s",&s);
    while (cur != NULL) {
        if(cur->auter < s) {
            if (cur->itsPrev == NULL) { //если удаляем первый элемент
                theList.itsFirst = cur->itsNext;    //первым будет второй элемент в списке
                                theList.itsFirst->itsPrev = NULL;
                free(cur);  //высвободили память
                cur = theList.itsFirst; //перевели указатель на второй элемент
            }else {//если элемент не первый
                temp = cur;
                cur->itsPrev->itsNext = cur->itsNext;   //с предыдущего элемета указали на последующий
                cur->itsNext->itsPrev = cur->itsPrev;   //со следующего элнемента указали на предыдущий
                cur= cur->itsPrev; //текущий будет тот, который стоит перед удаляемым
                free(temp);
                //delete cur;
            }
        } else cur = cur->itsNext;  
    }
}
Добавлено через 1 минуту
Вот структура

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Book
{
    char itsName[10];
    char auter[10];
    int year;
   
    Book* itsNext; // * itsNext - указатель на последующую структуру
    Book* itsPrev; // * itsPrev - указатель на предыдущую структуру
};
 
struct List
{
     Book* itsFirst;
     Book* itsLast;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2010, 18:32     двусвязный список - функция удаления
Посмотрите здесь:

Двусвязный список C++
Двусвязный список C++
C++ двусвязный список
Двусвязный список C++
Двусвязный список C++
Односвязный список.Функция удаления C++
Функция удаления элементов (список, стек) C++
Двусвязный список C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
09.06.2010, 18:52     двусвязный список - функция удаления #2
Цитата Сообщение от m9c1k Посмотреть сообщение
if(cur->auter < s)
почему меньше?
почему не равно?
m9c1k
31 / 6 / 1
Регистрация: 07.06.2010
Сообщений: 75
10.06.2010, 18:44  [ТС]     двусвязный список - функция удаления #3
Подскажите как надо

Добавлено через 2 минуты
При if(cur->auter == s) тоже неработает

Добавлено через 1 час 46 минут
Поменял на if (strcmp((cur->auter),s)==0) ,но всеравно не работает
Подскажите,где ошибка

Добавлено через 1 час 13 минут
Подправил функцию.Теперь,если автор находиться в середине или в конце списка ,то он удаляеться,а если в начале,то прога виснет. Подскажите ,почему?

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
34
35
36
37
38
39
40
41
42
43
void DeleteBook(List& theList) // функция удаления заданной позиции
{
    char s[20];
    Book* cur = theList.itsFirst;
    
    Book *temp;
    printf( " Enter the auter for deleted Book: \n");
    scanf("%s",&s);
    while (cur != NULL)
          {
               if (strcmp((cur -> auter),s)==0) 
               {
                   if (cur==theList.itsFirst) //если удаляем первый элемент
                   {            
                       theList.itsFirst = cur->itsNext; //первым будет второй элемент в списке
                       theList.itsFirst->itsPrev = NULL;
                        free(cur);  //высвободили память
                        cur = theList.itsFirst; //перевели указатель на второй элемент
                    }
                   else 
                   {
                       if (cur==theList.itsLast)//если элемент не первый
                       {
                        theList.itsLast = cur->itsPrev;
                        theList.itsLast->itsNext = NULL;                     
            
                        free(cur);  //высвободили память
                        cur = theList.itsLast;
                       }
                        else
                         {              
                            cur->itsNext->itsPrev = cur->itsPrev;   //с предыдущего элемета указали на последующий
                            cur->itsPrev->itsNext = cur->itsNext;
                            temp=cur;                               
                            cur= cur->itsNext; 
                            free(temp);
            //  
                          }
                    } 
                    }
                    else  cur = cur->itsNext;   
                }
           }
Добавлено через 8 часов 59 минут
Up...

Добавлено через 3 часа 7 минут
Не могу найти ошибку(

Добавлено через 8 часов 42 минуты
очень нужна ваша помощь
Yandex
Объявления
10.06.2010, 18:44     двусвязный список - функция удаления
Ответ Создать тему
Опции темы

Текущее время: 20:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru