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

Сортировка в двусвязном списке

17.06.2016, 08:41. Показов 2031. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть класс List, в него вложен класс Node, в Node в качестве данных используется класс Circle
Задание: Написать для класса List сортировку по возрастанию площади объекта.
Я попыталась реализовать сортировку пузырьком (менять обязательно нужно указатели),но у меня не работает код.
Не могли бы подсказать в чем ошибка.Спасибо заранее.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include <fstream>
class Point
{
    int m_x;
    int m_y;
public: Point(int x = 0, int y = 0) : m_x(x), m_y(y){};
        
        Point &operator=(int n){ m_x = n; m_y = n; return *this; }// oператор присваивания
        bool operator==(const Point &c) const { return (m_x == c.m_x && m_y == c.m_y); };
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include "Point.h"
#include <ostream>
class Circle
{
    Point centr;
    int m_r;
public: 
    Circle();
    Circle(int x, int y, int r);
    Circle(Point &c, int r);
    bool operator==(const Circle &c) const { return (m_r == c.m_r && centr == c.centr); };
    double PL(){ return (3.14 *m_r*m_r); };
    bool operator<(const Circle &a) { return (this->m_r < a.m_r); };
};

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include"Circle.h"
#pragma once
 
 
class Node
{  
    Node* pPrev;        //указатель на предыдущий элемент
    Node* pNext;        //указатель на следующий элемент
    Circle m_Data;
 
    friend class List;
    Node(){pPrev = pNext = nullptr; };
       Node(Node *p, const Circle &a);  //конструктор, посредством которого создаваемый Node «подключается» в список.
       ~Node();   
       bool operator<(const Node &a) { return (this->m_Data < a.m_Data); };
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
#include "Node.h"
#include "Circle.h"
#include <ostream>
class List
{
    
    //данные
    Node Head;  // фиктивный элемент, который является признаком начала списка
    Node Tail;  // фиктивный элемент, который является признаком конца списка
    size_t m_size;  //количество элементов
 
public: 
    List(){ Head.pNext = &Tail; Tail.pPrev = &Head; m_size = 0; };
    List(const List &c);
    List(List && other);
    void Sort();
    void EmptyList();
    ~List();
САМА СОРТИРОВКА
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
void List::Sort()
{
    Node* p = Head.pNext;
    int j = m_size;
    while (p != &Tail)
    {
        Node* np = p;
        for (int i = 0; i <j - 1; i++)
        {
            if (np->m_Data.PL() > np->pNext->m_Data.PL())
            {
                Node* p1 = np->pNext;
                Node* p2 = np->pPrev;
 
                p2->pNext = np;
                np->pNext->pPrev=np->pPrev;
                p2 = np;
                np = np->pNext;
                np->pNext = p1->pNext;
                np->pPrev = p1;
 
 
                
            }
            np = np->pNext;
        }
        p = p->pNext;
        j--;
    }
    
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2016, 08:41
Ответы с готовыми решениями:

Сортировка в двусвязном списке
Помогите реализовать сортировку по убыванию в двусвязном списке, сделал что-то такое, но оно не работает template &lt;typename T&gt; ...

Clear() в двусвязном списке
Привет. Из функции pop_front() хочу сделать clear(), а из clear() соответственно деструктор двусвязного списка. pop_front() работает без...

Ошибка в двусвязном списке
Задача - сделать очередь с приоритетным исключением на основе двухсвязного списка. Проблема в том, что элементы не всегда становяться по...

1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
17.06.2016, 14:22
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void List::Sort()
{
    Node* p = Head.pNext;
    Node temp;
 
        for (Node* i = p; i != NULL && i->pNext != NULL; i = i->pNext)
        {
        for (Node* j = p; j->pNext != NULL; j = j->pNext)
        {
            if (j->pNext->m_Data.PL() < j->m_Data.PL())
            {
                tmp = *(j->pNext);
                *(j->pNext) = *j;
                *j = tmp;
            }
        }
        }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2016, 14:22
Помогаю со студенческими работами здесь

Поиск в двусвязном списке
Доброго времени суток. Помогите написать код, который ищет в двусвязном списке елемент по его значению. Тоесть идёт запрос в консоле...

Push_front() в двусвязном списке
Привет. Не получается рабочую функцию написать. Помогите. описание класса: template&lt;class T&gt; class DoubleList { public: ...

Поиск в двусвязном списке
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; struct element{ ...

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

Поиск элемента в двусвязном списке
Элемент двусвязного списка точка(x,y). Нужно написать функцию для нахождения максимально удаленной точки от центра координат. ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru