Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 1
Регистрация: 05.04.2015
Сообщений: 66

Удаление элементов из списка

16.05.2015, 21:21. Показов 1657. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите. Не представляю, как удалять элементы из списка. А уже скоро нужно сдавать( Помогите, кто чем может...
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
struct Book
{  
    
    char name[50]; //Название книги
    char athor[50]; //Фамилия автора
    char country[50]; //страна выпуска
    int year; //год издания
    int price;// цена
 
    void Input(Book &book);  //Функция ввода данных в структуру 
    Book *Next; //Адрес на следующий элемент
   
 
};
 
 
class List
{   
    Book *Head; //Указатель на начало списка
public:
    List() :Head(NULL){}; //Конструктор по умолчанию (Head=NULL)
    ~List();//Деструктор
    void Add(Book &book);
    void Show();
    void clear();
};
 
/*ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО КНИГЕ*/
void Book::Input(Book &book)
{   
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "Название книги: "; cin.getline(name, 50);
    cout << "Автор: "; cin.getline(athor, 50);
    cout << "Страна издания: "; cin.getline(country, 50);
    cout << "Цена: "; cin >> price;
    cout << "Год: "; cin >> year;
}
 
List::~List() //Деструктор класса List
{
    while (Head != NULL) //Пока по адресу есть хоть что-то
    {
        Book *temp = Head->Next; //Сразу запоминаем указатель на адрес следующего элемента структуры
        delete Head; //Освобождаем память по месту начала списка
        Head = temp; //Меняем адрес начала списка
    }
}
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
void List::Add(Book &book)
{  
    Book *temp = new Book; //Выделение памяти под новую структуру
    temp->Next = Head; //Указываем, что адрес следующего элемента это начало списка
    
    //Копирование содержимого параметра book в только что созданную переменную
    strcpy_s(temp->name, book.name);
    strcpy_s(temp->athor, book.athor);
    strcpy_s(temp->country, book.country);
    temp->year = book.year;
    temp->price = book.price;
    
 
    Head = temp; //Смена адреса начала списка
}
 
int main()
{
 
    setlocale(LC_ALL, "Russian");
    Book book; //Обяъвили переменную, тип которой Книга
    int N;  //Объявили переменную - число книг
    List lst; //Объявили переменную типа Список. Она выступает как контейнер данных
 
    cout << "введите количество книг: "; cin >> N; //Ввели число книг
    cin.ignore(); //Игнорируем клавишу Enter
 
    
    
     for (int i = 0; i < N; i++)
    {
        book.Input(book); //Передаем в функцию заполнения переменную книга
        lst.Add(book); //Добавляем заполненную структуру в список
        
    }
     
    lst.Show(); //Показываем список на экране 
 
 
    system("PAUSE");
}
/*ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН*/
void List::Show()
{
    Book *temp = Head; //Объявляем указатель и изначально он указывает на начало
    ofstream fout("book.xls", ios_base::out);
    while (temp != NULL) //Пока по адресу на начало хоть что-то есть
    {
        //Выводим все элементы структуры
        cout << temp->name << "  "; //Вывод названия
        cout << temp->athor << "  "; //Вывод фамилии автора
        cout << temp->country << "  "; //Вывод страны
        cout << temp->year << "  "; //Вывод года
        cout << temp->price << endl; // Вывод цены
        fout << temp->name << "\t"; //Вывод названия
        fout << temp->athor << "\t"; //Вывод фамилии автора
        fout << temp->country << "\t"; //Вывод страны
        fout << temp->year << "\t"; //Вывод года
        fout << temp->price << endl;
        temp = temp->Next; //Указываем на следующий адрес из списка
 
    }
 
    fout.close();
 
    ifstream fin("book.xls", ios::in);
    if (!fin.is_open()) // если файл не открыт
        cout << "Файл не может быть открыт!\n"; // сообщить об этом
    else
    {
        cout << "........................................................" << endl;
        cout << "Чтение из файла..." << endl;
        cout << fin.rdbuf() << endl;
    }
    fin.close();
    string k;
    string n = "y";
    cout << "Уничтожить структуру данных? y/n" << endl;
    cin.ignore();
    cin >> k;
    if (k == n) {
        delete [] new Book;
    }
    
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2015, 21:21
Ответы с готовыми решениями:

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

Двунаправленный список (добавление/удаление элементов в голову, просмотр списка, реализовать дублирование элементов с заданным значением)
Здравствуйте! Помогите написать программу, обеспечивающую работу с двунаправленным нециклическим списком: добавление/удаление элементов в...

Удаление элементов из списка
Даны числа n, m и список list&lt;n_vec&gt; l1 Как удалить из l1 элементы с n по m? n_vec - структура

4
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
16.05.2015, 21:39
Цитата Сообщение от e_kate_rina7 Посмотреть сообщение
Помогите. Не представляю, как удалять элементы из списка.
Сделайте двусвязный кольцевой список и не мучайтесь (пример тут).
0
1 / 1 / 7
Регистрация: 16.05.2015
Сообщений: 34
16.05.2015, 22:05
e_kate_rina7,
Например, если Вы хотите удалить книгу по имени
C
1
2
3
4
5
6
7
void List::DelByName(char* name)
{
    Book* tmp;
    if (strcmp(Head->name, name) == 0)
    {
 
         Head = Head->
Добавлено через 6 минут

Не по теме:

так, форум сожрал код, сейчас еще разок напишу



Добавлено через 8 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void List::DelByName(char* name)
{
    Book* tmp;
    if (strcmp(Head->name, name) == 0)
    {
        tmp = Head;
        Head = Head->Next;
        delete tmp;
        return
    }
    tmp = Head;
    while (tmp->Next != NULL && strcmp(tmp->Next->name, name) != 0)
    {
        tmp = tmp->Next;
    }
 
    if (tmp->Next != NULL)
    {
        tmp->Next = tmp->Next->Next;
    }
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
16.05.2015, 22:11
Цитата Сообщение от valner Посмотреть сообщение
так, форум сожрал код, сейчас еще разок напишу
Тогда уж:
C++
1
2
3
4
5
6
7
8
9
10
for(Book**next=&Head;*next;next=&(*next)->next)
{
    if(!strcmp((*next)->name,name))
    {
        Book*to_delete=*next;
        *next=to_delete->next;
        delete to_delete;
        return;
    }
}
И вообще, списки для таких номеров не предназначены.
1
0 / 0 / 1
Регистрация: 05.04.2015
Сообщений: 66
16.05.2015, 23:09  [ТС]
спасибо, помогли. Очень благодарна)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2015, 23:09
Помогаю со студенческими работами здесь

Удаление элементов из списка
Товарищи, прошу о помощи! Задание такое: создать список из целых чисел. Удалить лишние элементы в списке так, чтобы в результирующем...

Удаление элементов списка
Есть функция, которая перебирает все элементы списка и ищет позиции тех, что нужно удалить и удаляет, ориентируясь на значение, хранящееся...

Удаление элементов из списка
Создать список. Потом удалить из него все отрицательные элементы. Если можно с комментариями некоторых действий) кстати сдавать программу...

Удаление элементов из списка
Доброго всем времени суток! в универе начали проходить динамические структуры, дошли до списков. Дали задание составить динамический...

Удаление элементов списка
Есть двунаправленный список, функция которая при повторении двух подряд одинаково парных чисел суммирует их, записывает в один элемент а...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru