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

Массив через кольцевой список

21.01.2021, 22:41. Показов 2178. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, я не очень понимаю как это делать.
В заданном массиве r (n) поменять местами элементы, расположенные рядом и сумма их значений кратная 5.подсчитать количество замен. это надо сделать через Двух-связан кольцевой список

Добавлено через 4 часа 48 минут
Никто не знает(
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2021, 22:41
Ответы с готовыми решениями:

Реализовать кольцевой список. Как закольцевать список обычный?
Помогите пожалуйста реализовать кольцевой список. Я так понимаю, он может быть двусвязным и односвязным? Меня интересует односвязный....

Кольцевой список
Пытаюсь написать программу,но столкнулся с проблемой.Написал ф-ю создания списка из n элементов,объявил её тип сначала как void ,выдал...

Кольцевой список
Что нужно поменять,чтобы новые елементы добавлялись не в конец списка, а в начало? void List::Insert_end_list_2(int &x) { ...

21
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2021, 23:10
Цитата Сообщение от NerouN29 Посмотреть сообщение
Помогите, я не очень понимаю как это делать.
Что именно тебе непонятно?
Массив здесь не нужен. Делаешь двусвязный список и вперёд. Посмотри ссылки внизу страницы - Похожие темы
0
0 / 0 / 0
Регистрация: 17.11.2020
Сообщений: 169
22.01.2021, 00:07  [ТС]
oleg-m1973, мне не понятно как сделать двухсвязный список и выполнить условия
0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
22.01.2021, 00:56
Лучший ответ Сообщение было отмечено NerouN29 как решение

Решение

Условия бы поточнее или хотя бы пример входных/выходных данных. Написал топорно и так, как понял условия задачи:
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
#include <iostream>
using namespace std;
 
// Структура узла двусвязного списка
struct Node
{
    Node *previous = nullptr, *next = nullptr;
    int value = 0;
};
 
// Очистка списка
void clearList(Node* head, Node*& list)
{
    if (list != nullptr)
    {
        if (list->next != nullptr && list->next != head)
            clearList(list->next);
 
        delete list;
    }
}
 
// Чтение значений элементов списка из консоли
void readList(Node*& head, Node*& list, size_t size, size_t index = 0)
{
    if (list != nullptr)
    {
        if (list == head)
            cout << "Введите элементы списка:\n";
 
        cout << "Элемент №" << index + 1 << ": ";
        cin >> list->value;
 
        if (size - 1 > 0)
        {
            list->next = new Node();
            list->next->previous = list;
            readList(head, list->next, size - 1, index + 1);
        }
        else
        {
            list->next = head;
            head->previous = list;
            cout << "\n";
        }
    }
}
 
// Вывод текущего состояния списка в консоль
void printList(Node* head, Node* list)
{
    if (list != nullptr)
    {
        if (list == head)
            cout << "Список:\n";
 
        cout << list->value << "\t";
 
        if (list->next != head)
            printList(head, list->next);
        else
            cout << "\n\n";
    }
}
 
// Перестановка элементов списка при условии, что они стоят рядом и сумма их значений кратна пяти
void replaceList(Node* head, Node*& list)
{
    if (list != nullptr)
    {
        if (list->next != nullptr && list->next != head)
        {
            if ((list->value + list->next->value) % 5 == 0)
            {
                int temp = list->value;
                list->value = list->next->value;
                list->next->value = temp;
            }
 
            replaceList(head, list->next);
        }
    }
}
 
int main()
{
    setlocale(LC_ALL, "");
 
    Node* list = new Node();
 
    size_t size = 0;
    cout << "Введите размер списка: ";
    cin >> size;
    cout << "\n";
 
    readList(list, list, size);
    printList(list, list);
 
    replaceList(list, list);
    printList(list, list);
 
    clearList(list);
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 17.11.2020
Сообщений: 169
22.01.2021, 13:24  [ТС]
BlackStoneBlack, у вас ошибка в функции clearList
0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
23.01.2021, 13:32
NerouN29, в чем конкретно?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2021, 13:36
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
NerouN29, в чем конкретно?
Как минимум в том, что не надо делать её рекурсивной. Просто удали все элементы в цикле и всё.
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
clearList(list->next);
head забыл передать
0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
23.01.2021, 13:40
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
head забыл передать
А, да, увидел.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Как минимум в том, что не надо делать её рекурсивной. Просто удали все элементы в цикле и всё.
Ну да, можно передавать размер списка, причем во все функции, тогда вообще можно избавиться от рекурсий, но так неинтересно. В любом случае, мне кажется, что рекурсивный обход в данном случае оправдан, т.к. требуется работать с двусвязным списком. Хотя, для этой задачи подошел бы вариант и с односвязным
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2021, 13:44
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Ну да, можно передавать размер списка, причем во все функции, тогда вообще можно избавиться от рекурсий, но так неинтересно. В любом случае, мне кажется, что рекурсивный обход в данном случае оправдан, т.к. требуется работать с двусвязным списком. Хотя, для этой задачи подошел бы вариант и с односвязным
Рекурсивный подход здесь не оправдан никак. Рекурсию вообще лучше избегать по-возможности.

C++
1
2
3
4
5
6
7
8
9
void clearList(Node *&head)
{
    while (head)
    {
        auto *p = head;
        head = head->next;
        delete p;
    }
}
1
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
23.01.2021, 13:45
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Рекурсивный подход здесь не оправдан никак. Рекурсию вообще лучше избегать по-возможности.
Да, справедливо. Ну хорошо, Ваш вариант лучше, безусловно.
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2021, 13:49
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Да, справедливо. Ну хорошо, Ваш вариант лучше, безусловно.
Ты, когда делаешь рекурсивные функции, то оценивай глубину рекурсии. Если она, глубина, равна длине списка/массива, то лучше от неё, рекурсии, как-то избавиться. А то получишь переполнение стека, а это очень плохо.
1
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
23.01.2021, 13:53
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты, когда делаешь рекурсивные функции, то оценивай глубину рекурсии. Если она, глубина, равна длине списка/массива, то лучше от неё, рекурсии, как-то избавиться. А то получишь переполнение стека, а это очень плохо.
Да я её толком не использую никогда, разве что в учебных каких-то проектах, поэтому особо в это дело не вникал. Спасибо, взял на вооружение.
1
0 / 0 / 0
Регистрация: 17.11.2020
Сообщений: 169
23.01.2021, 18:06  [ТС]
BlackStoneBlack, cпасибо большое, а можете сделать чтобы не водить самому, а случайные числа были в списке
0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
23.01.2021, 18:42
NerouN29, пожалуйста:
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
void fillList(Node*& head, Node*& list, size_t size)
{
    if (list != nullptr)
    {
        list->value = rand() % 100 - 50;
 
        if (size - 1 > 0)
        {
            list->next = new Node();
            list->next->previous = list;
            fillList(head, list->next, size - 1);
        }
        else
        {
            list->next = head;
            head->previous = list;
        }
    }
}
 
// <...>
 
int main()
{
    setlocale(LC_ALL, "");
 
    Node* list = new Node();
 
    size_t size = 0;
    cout << "Введите размер списка: ";
    cin >> size;
    cout << "\n";
 
    //readList(list, list, size);
    fillList(list, list, size);
    printList(list, list);
 
    // <...>
    return 0;
}
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2021, 18:44
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
NerouN29, пожалуйста:
Опять же - зачем ты здесь используешь рекурсию? Здесь достаточно простого цикла for
1
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
23.01.2021, 18:57
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Опять же - зачем ты здесь используешь рекурсию? Здесь достаточно простого цикла
Да знаю, но я сделал лениво, слегка переделав метод из моего того варианта. Не думаю, что в условиях данной задачи это критично
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2021, 19:00
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Да знаю, но я сделал лениво, слегка переделав метод из моего того варианта. Не думаю, что в условиях данной задачи это критично
Зря не думаешь. Как раз в условиях данной задачи это очень критично.
1
0 / 0 / 0
Регистрация: 17.11.2020
Сообщений: 169
24.01.2021, 15:09  [ТС]
BlackStoneBlack, спасибо большое , а чего иногда срабатывает ошибка в visual studio вызвал срабатывание точки останова?
0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
24.01.2021, 15:51
NerouN29, в VS не проверял, писал в Code::Blocks с MinGW, скрин или лог под спойлер сделайте. Возможно, как раз та ошибка, о которой говорил oleg-m1973, возможно где-то просто обращение к недопустимому адресу в памяти. Надо проверять. По-хорошему - нужны данные, которые Вы вводите и при которых возникает ошибка.
1
0 / 0 / 0
Регистрация: 17.11.2020
Сообщений: 169
24.01.2021, 16:19  [ТС]
BlackStoneBlack, спасибо большое, буду признательный если поможете ещё одну задачу решить, а то я совсем не понимаю как делать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2021, 16:19
Помогаю со студенческими работами здесь

кольцевой список
Граждане - товарищи, нужна помощь! Задание- Описать процедуру, которая формирует очередь Queue, включив в нее по одному разу элементы,...

Двусвязный кольцевой список
Здравствуйте, подскажите пожалуйста где ошибка, список ложится при выводе, исключение: &quot;temp был nullptr&quot; //stdafx.h //...

Кольцевой односвязный список
Есть список программа удаляет добавляет редактирует сортирует есть поиск но если сначала добавить потом еще добавить потом редактировать...

Кольцевой двусвязный список
Приведите пожалуйста пример как его создать, добавить в него элемент и удалить элемент из такого списка.

Двунаправленный кольцевой список
Ребята, спасайте. Очень много дают информации, всё не успеваю освоить. Потихоньку стараюсь наверстать, но срочно необходимо решить 2...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru