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

Функция удаляющая элементы списка в начале и в конце

25.07.2020, 23:16. Показов 1103. Ответов 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
void sznur::usunFragmenty(int P)
{
    if (size < P)
    {
        while (size)
        {
            Box* killer = head;
            head->pNext;
            delete killer;
            size--;
        }
    }
    for (int i = 0; i < P; i++)
    {
        Box* killer = head;
        head=head->pNext;
        delete killer;
        size--;
    }
    Box* pred = nullptr;
    Box* succ = head;
        while (succ != nullptr && succ->data < succ->pNext->data)
        {
            pred = succ;
            succ = succ->pNext;
        }
        while (succ!= nullptr)
        {
            if (pred != nullptr)
            {
                pred->pNext = succ;
            }
            else
            {
                head = succ;
            }
            if (succ->data >= succ->pNext->data)
            {
                succ = succ->pNext;
                for (int i = 0; i < P; i++)
                {
                    Box* killer = succ;
                    succ = succ->pNext;
                    delete killer;
                    size--;
                }
            }
        }
        
}
Я точно знаю, что мусор там появляется, в момент выполнения кода от 40 строчки
Заранее спасибо!

П.С. (Суть работы этой функции)
есть список: 4,7,5,1,6,6,1,7. И есть P=3, который я передаю через параметр, первым делом я удаляю первые P элемента из списка, а затем проверяю на возрастание и до момента когда возрастание прекратится, я снова удаляю следующие P элемента.
И так до конца. А да, по итогу очевидно список должен состоять из двух элементов 1->6
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2020, 23:16
Ответы с готовыми решениями:

Функция удаляющая пробелы в начале и в конце строки
Разработайте функцию std::string TrimBlanks(std::string const&amp; str), выполняющую отрезание пробелов в начале и в конце строки str, и...

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

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

4
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.07.2020, 12:02
Цитата Сообщение от nigha Посмотреть сообщение
Я точно знаю, что мусор там появляется, в момент выполнения кода от 40 строчки
Не очень понял, что ты пытаешься здесь сделать, но в односвязном списке элемент удаляется по указателю на предыдущий элемент. Возможно здесь надо что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
if (succ->data >= succ->pNext->data)
{
    for (int i = 0; i < P; i++)
    {
        Box *killer = succ->pNext;
        succ->pNext = killer->pNext;
        succ = succ->pNext
        delete killer;
        size--;
    }
}
0
0 / 0 / 0
Регистрация: 22.07.2020
Сообщений: 11
26.07.2020, 13:13  [ТС]
Не то, ведь когда например в списке остается 1 число и его нужно удалить, то succ.pnext не сможет присвоится ибо succ = nullptr.

Я все пытаюсь сделать лабу универовскую, я уже писал об этом ранее, вот сейчас додумался использовать pred(predecessor), succ(successor), но все равно встрял...

Сортировка односвязного списка!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.07.2020, 13:25
Цитата Сообщение от nigha Посмотреть сообщение
Не то, ведь когда например в списке остается 1 число и его нужно удалить, то succ.pnext не сможет присвоится ибо succ = nullptr.
И ты не знаешь как это учесть, но знаешь, что то, что я тебе показал это "не то"? Ну да, похоже, встрял
0
0 / 0 / 0
Регистрация: 22.07.2020
Сообщений: 11
26.07.2020, 13:44  [ТС]
Да, это было очевидно, я даже в отладке все прогнал, когда этот цикл идет по второму кругу, то прыгает через число из-за чего получается, что он уже закончит удалять числа, когда ему ещё 1 круг предстоит сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2020, 13:44
Помогаю со студенческими работами здесь

Удаление в начале/конце списка
Покажите, пожалуйста, как убрать элемент из конца списка или из его начала?

Удаление пробелов в конце и начале списка
Возможно ли в прологе реализовать удаление пробелов из начала и конца списка? Есть задача - вычислить длину последнего слова в строке...

Функция, удаляющая из списка каждый k-ый элемент
Помогите пожалуйста. Опишите функцию, удаляющую из списка каждый k-ый элемент.

Функция, удаляющая элемент из двусвязного списка
Написать функцию, удаляющую элемент из двусвязного списка. Убедитесь, что программа работает, когда надо удалить первый и/или последний...

Функция удаляющая первый узел из связного списка
Реализуйте и протестируйте функцию: template &lt;class T&gt; void DeleteFront(Node&lt;T&gt;* &amp;head);удаляющую первый узел из связного списка,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru