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

Как реализовать обратную сортировку (по убыванию) в двусвязном списке на C++?

07.05.2020, 16:00. Показов 432. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как реализовать обратную сортировку (по убыванию) в двусвязном списке на C++?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2020, 16:00
Ответы с готовыми решениями:

Как реализовать пузырьковую сортировку в обобщенном двусвязном списке?
Как реализовать пузырьковую сортировку в обобщенном двусвязном списке? Сначала думал все просто, хотел реализовать операции перегрузки...

Реализовать файл структур на двусвязном списке
Здравствуйте уважаемые! Дан файл структур с тремя полями: фамилия, возраст, оценка. Реализовать структуру для упорядоченного поиска...

Реализовать поиск максимального элемента в двусвязном списке
Помогите пожалуйста доделать код. Вместо блока удаление нужен осуществить поиск максимального элемента :help: #include...

6
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 16:38
Цитата Сообщение от Alex478077 Посмотреть сообщение
Как реализовать обратную сортировку (по убыванию) в двусвязном списке на C++?
Так же как прямую (по-возрастанию), только с противоположным условием.
0
0 / 0 / 0
Регистрация: 03.10.2019
Сообщений: 10
07.05.2020, 16:42  [ТС]
не получается. Никак.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 16:43
Цитата Сообщение от Alex478077 Посмотреть сообщение
не получается. Никак.
Что сделал-то покажи
0
0 / 0 / 0
Регистрация: 03.10.2019
Сообщений: 10
07.05.2020, 17:23  [ТС]
это с сортировкой по возрастанию.



struct spisok
{
int inf;
spisok* pred;
spisok* next;
};

void addleft(spisok* sp, int inf) {
spisok* spt = new spisok;
spt->inf = inf;
spt->pred = sp->pred;
spt->next = sp;
spt->pred->next = spt;
sp->pred = spt;
return;
}

int readdel(spisok* sp) {
int inf = sp->inf;
sp->pred->next = sp->next;
sp->next->pred = sp->pred;
delete sp;
return inf;
}



void ochered(spisok** beg, spisok** n) {
*beg = new spisok;
*n = new spisok;

(*beg)->next = *n;
(*n)->pred = *beg;

}

void print(spisok* beg, spisok* n)
{
spisok* a = beg;
while (a != n->pred)
{
cout << a->next->inf << " ";
a = a->next;
}
cout << endl;
}

void del(spisok*& beg, spisok*& n)
{
spisok* tmp = beg->next;
while (tmp != n)
{
tmp->pred->next = tmp->next;
tmp->next->pred = tmp->pred;
delete tmp;
tmp = beg->next;
}
cout << endl;
delete beg;
beg = NULL;
delete n;
n = NULL;
}

void slip(spisok** sl, spisok** sr, spisok* slL, spisok* srL, spisok* slR, spisok* srR) {
ochered(sl, sr);
spisok* sptL = slL->next;
spisok* sptR = slR->next;

while ((sptL != srL) && (sptR != srR))
{
if (sptL->inf < sptR->inf) {
addleft(*sr, readdel(sptL));
sptL = slL->next;
}
else {
addleft(*sr, readdel(sptR));
sptR = slR->next;
}
}
while (sptL != srL)
{
addleft(*sr, readdel(sptL));
sptL = slL->next;
}
delete slL; delete srL;
while (sptR != srR) {
addleft(*sr, readdel(sptR));
sptR = slR->next;
}
delete slR; delete srR;
}

void razbiv(spisok* sl, spisok* sr, spisok** slL, spisok** srL, spisok** slR, spisok** srR) {
ochered(slL, srL);
ochered(slR, srR);
spisok* spt = sl->next;

while (spt != sr)
{
addleft(*srL, readdel(spt));
spt = sl->next;
if (spt != sr) {
addleft(*srR, readdel(spt));
spt = sl->next;
}
}
delete sl;
delete sr;
}

void Sort(spisok** sl, spisok** sr) {
spisok* slL, * srL, * slR, * srR;
if ((*sl)->next->next == *sr) return;
razbiv(*sl, *sr, &slL, &srL, &slR, &srR);
slip(sl, sr, slL, srL, slR, srR);
}

void zap(spisok* beg, spisok* n) {
int g, tall;
do {
cout << "Введите колличество элементов в списке: ";
cin >> tall;
} while (tall <= 1);
for (int i = 0; i < tall; i++) {
cout << "Введте число: ";
cin >> g;
spisok* p = new spisok;
p->inf = g;
p->next = n;
p->pred = n->pred;
n->pred = p;
p->pred->next = p;
}
}

int main()
{
setlocale(LC_ALL, "rus");
spisok* sl, * sr,* slL,* srL,* slR,* srR,* SL,* SR;
ochered(&slL, &srL);
zap(slL, srL);
ochered(&slR, &srR);
zap(slR, srR);
slip(&sl, &sr, slL, srL, slR, srR);
Sort(&sl, &sr);
print(sl, sr);
del(sl, sr);
}
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
07.05.2020, 17:34
Alex478077, https://www.cyberforum.ru/blog... g4022.html
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 17:38
Цитата Сообщение от Alex478077 Посмотреть сообщение
это с сортировкой по возрастанию.
Сделай функцию, которая будет искать последний элемент, у которого inf <= заданному
C++
1
spisok *lower_bound(spisok *head, int inf);
Потом функцию, которая добавляет элемент после указанного pos
C++
1
void insert_after(spisok **head, spisok *pos, spisok &node);
Добавлено через 2 минуты
Тогда сортировка будет выглядеть так
C++
1
2
3
4
5
6
7
8
9
10
11
void Sort(spisok **head)
{
    spisok *h = *head;
    *head = nullptr;
    while (h)
    {
        spisok *p = h;
        h = h->next;
        insert_after(head, lower_bound(*head, p->inf), *p);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2020, 17:38
Помогаю со студенческими работами здесь

Нужно реализовать обратную сортировку пузырьком
Сортировка пузырьком в уменьшающимся порядке

Реализовать программно функцию, которая меняет местами два указанных узла в линейном двусвязном списке
Дан двусвязный список#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;malloc.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Реализовать сортировку по возрастанию и убыванию
Здравствуйте! имеется код готовой программы. В нем нужно наиболее легким способом ( как сказал преподаватель с помощью двух строк)...

С использованием heap реализовать сортировку по убыванию
Для списка пар pair&lt;string,int&gt;, где первое число - имя пользователя, второе - сумма набранных балов, с использованием heap реализовать...

Как удалить сторожей в двусвязном списке?
Чего-то недогоняю. Как удалить &quot;сторожей&quot; head и tail? И можно ли проверить, что они уничтожены? /* Задача: Дан двусвязный список из n...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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 и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru