Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
st-
0 / 0 / 0
Регистрация: 14.05.2016
Сообщений: 1
#1

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

17.06.2016, 08:41. Просмотров 277. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2016, 08:41
Ответы с готовыми решениями:

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

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

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

Ошибки линковки в двусвязном списке
Помогите, пожалуйста, разобраться, в чем ошибки.. Возникают на этапе линковки, Error...

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

1
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
17.06.2016, 14:22 #2
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;
            }
        }
        }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2016, 14:22

Использование итератора в двусвязном списке
Всем добрый день/вечер. Я сегодня уже обращался к форумчанам за помощью, и мне помогли, но видать я...

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

Сдвиг элемента в двусвязном списке
Нужна функция для сдвига элемента на заданной позиции на k позиций назад (влево) в двусвязном...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru