Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 06:50   #1
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию двусвязный список-паскаль

Подскажите,где ошибка. Функция удаляет книгу из списка по названию автора...
Теперь,если автор находиться в середине или в конце списка ,то он удаляеться,а если в начале,то прога виснет.

Вот функция удаления
Код:
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;   
                    }
           }
это структура

Код:
struct Book
{
    char itsName[10];
    char auter[10];
    int year;
   
    Book* itsNext; // * itsNext - указатель на последующую структуру
    Book* itsPrev; // * itsPrev - указатель на предыдущую структуру
};

struct List
{
     Book* itsFirst;
     Book* itsLast;
};

void menu(); // создание меню
void AddBook(List&); // добавление товара
void DeleteBook(List&); // удаление товара
void PrintList(List*);  // вывод списка
void CreateList (List*&); // создание списка
List* theList = 0;
Подскажите кто знает
ai\ekcah^p вне форума Ответить с цитированием
Старый 10.06.2010, 09:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На твоем месте я бы при выполнении блока условия, ну там где ты вызываешь free вписал бы return - типа раз найден выйдем из проги.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2010, 09:51   #3
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

Не помогло. Как вводишь автора, нажимаешь Enter и прога виснет, и это если автор в начале списка,остальные (в середине и в конце) удаляються.
ai\ekcah^p вне форума Ответить с цитированием
Старый 10.06.2010, 10:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну значит пошаговкой пройдись, и посмотришь где ошибка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двусвязный список Work Group Помощь студентам 0 24.05.2010 21:27
двусвязный список klykovka Помощь студентам 8 22.05.2010 18:58
двусвязный список на си++ mizantrop32 Общие вопросы C/C++ 0 18.05.2010 17:45
Паскаль. двусвязный некольцевой неупорядоченный список KaZaaM Помощь студентам 3 29.05.2009 21:52
Двусвязный список kruserg Паскаль, Turbo Pascal, PascalABC.NET 1 28.04.2009 10:37