Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
32 / 7 / 1
Регистрация: 07.06.2010
Сообщений: 75

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

09.06.2010, 18:32. Показов 1879. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите,где ошибка. Функция удаляет книгу из списка по названию автора...

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;
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2010, 18:32
Ответы с готовыми решениями:

Двусвязный список. Функция swap
Дописать в класс list функцию: swap – поменять содержимое текущего списка с заданным. #pragma once template&lt;class T&gt; ...

Функция: вставка элемента в двусвязный список после заданного
Всем доброго времени суток! Нужно написать функцию вставки элемента в двусвязный список после заданного. Список моего задания состоит из 4...

Односвязный список.Функция удаления
Здравствуйте.Пытался организовать функцию удаления,но не получилось,добавлял цикл для начального заполнения,а потом удаления,не...

2
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
09.06.2010, 18:52
Цитата Сообщение от m9c1k Посмотреть сообщение
if(cur->auter < s)
почему меньше?
почему не равно?
1
32 / 7 / 1
Регистрация: 07.06.2010
Сообщений: 75
10.06.2010, 18:44  [ТС]
Подскажите как надо

Добавлено через 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 минуты
очень нужна ваша помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2010, 18:44
Помогаю со студенческими работами здесь

Функция удаления элементов (список, стек)
Подскажите, имеется функция добавления элементов (список, стек) Нужно на её основе сделать функцию удаления элемента. Что-то...

Переделать двусвязный список в двусвязный кольцевой
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Двусвязный список (в конец двусвязного списка добавить другой список)
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить другой список?

Составить двусвязный список на основе класса, объекты которого будут формировать этот список
Составить двусвязный список на основе класса, объекты которого будут формировать этот список. В описание класса должны входить данные для...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru