С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.04.2022
Сообщений: 26
1

Удаление всех максимальных элементов двусвязного списка

19.04.2022, 09:56. Показов 862. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Задание - удалить все максимальные элементы двусвязного списка.
функция killelem должна удалять узел, а killroot - первый элемент. Почему то ничего не происходит.
В отладчике переменная max все время равна 0, но максимальное значение выводится верно.
Скажите, пожалуйста, в чем может быть причина?
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
#include <iostream>
 
using namespace std;
int amount, buf, max, t;
struct node
{
    int data;
    struct node* next;
    struct node* prev;
};
 
struct node* firstnode(int a)//создаем начальный узел
{
    struct node* nde = new node;
    nde->data = a;
    nde->next = NULL;//пустой указатель на следующий и на предыдущий
    nde->prev = NULL;
    return  nde;
}
 
void insertnode(node* root, node* elem)//добавляем в список новый элемент
{
    if (root->next == NULL)//если указатель на следующий пуст
    {
        root->next = elem;
        elem->prev = root;//даем новому элементу адрес на предыдущий элемент
    }
    else insertnode(root->next, elem);//если указатель на следующий не пуст вызываем функцию рекурсивно
}
 
void printlist(node* root)
{
    cout << "your list:\n";
 
    struct node *p;
    p = root;
    do {
        cout << p->data << " ";
        p = p->next;
    } while (p != NULL);
}
void killelem(node* nde)
{
    struct node *next, *prev;
    prev = nde->prev;
    next = nde->next;
 
    if (prev != NULL)
    {
        prev->next = nde->next;
    }
    if (next != NULL)
    {
        next->prev = nde->prev;
    }
    
}
void killroot(node* root)
{
    struct node* temp;
    temp = root->next;
    temp->prev = NULL;
    
}
void findmax(node* root)
{
    cout << "\nMax elem:\n";
 
    node* ptr;
    ptr = root;
    int max = ptr->data;
    while (ptr)
    {
        if (max < ptr->data)
            max = ptr->data;
 
        ptr = ptr->next;
    }
    cout << max << endl;
    
}
 
 
int main()
{
    cout << "how many integers do you want to enter?\n";
    
    cin >> amount;
    cout << "insert " << amount << " integers\n";
    cin >> buf;
    node* root = firstnode(buf);
    buf = 0;
    for (int i = 0; i < amount - 1; i++)
    {
        cin >> buf;
        node* elem = firstnode(buf);
        insertnode(root, elem);
    }
    
    printlist(root);
 
    findmax(root);
 
    
    for (int i = 0; i < amount - 1; i++)
    {
        if (root->data == max)
        {
            if (root->prev = NULL)
            {
                killroot(root);
                
            }
            else
            {
                killelem(root);
                
            }
        }
 
    }
    printlist(root);
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2022, 09:56
Ответы с готовыми решениями:

Удаление всех четных элементов из двусвязного списка c++
#include&lt;iostream&gt; using namespace std; struct spis { int info; spis* prev, * next;...

Добавление и удаление элементов из двусвязного списка
Разбираю списки. Посмотрите код правильно ли я все понимаю?))) путаюсь с указателями. может можно...

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

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

Удаление элемента из двусвязного списка
При удалении элемента по индексу(deleteindex), если элемент находится во второй половине списке, то...

0
19.04.2022, 09:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2022, 09:56
Помогаю со студенческими работами здесь

Удаление элемента из двусвязного списка
Помогите пожалуйста найти где я ошибся. Элементы в список добавляются, вывод на экран тоже...

Удаление элемента из двусвязного списка
Доброго всем времени суток. Нужна помощь. Есть двусвязный список. Функции передаем какое то...

Удаление структуры из двусвязного списка
Доброго времени суток! Пытаюсь создать функцию удаления из списка структуры, не выполняется цикл...

Удаление элемента из двусвязного списка
Надо удалить элемент из двусвязного списка, если выполняется условие (2013-(current-&gt;god)&lt;3). Я...

Удаление из двусвязного циклического списка
Начал реализовывать структуру данных - Фибоначчиевы кучи. Столкнулся с проблемой при написании...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru