0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 24
1

Сортировка односвязного списка

08.05.2019, 23:16. Показов 1205. Ответов 1

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

Вообщем есть код:
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
using namespace std;
 
template <class t>
struct student {
 
    t number;
    string fio;
    string numb_group;
    t usp[5];
    student <t>* next;
    student(t numb,string fio1, string numb_group1,t usp0, t usp1, t usp2, t usp3, t usp4) {
        number = numb;
        fio = fio1;
        numb_group = numb_group1;
        usp[0] = usp0;
        usp[1] = usp1;
        usp[2] = usp2;
        usp[3] = usp3;
        usp[4] = usp4;
        next = nullptr;
    }
    student() {}
 
};
 
template <class t>
struct list {
    student<t>* head;
    list() {
        head = nullptr;
    }
    //добавление
    void push(t val,string val1,string val2,t val3, t val4, t val5, t val6, t val7) {
        student <t>*item = new student<t>(val, val1,val2,val3,  val4,  val5,  val6,  val7);
        item->next = head;
        head = item;
    }
    //проверка на пустоту
    bool empty() {
        return head == nullptr;
    }
    //размер
    int size()
    {
        student<t>* head2;
        head2 = head;
        int count = 0;
        while (head2 != nullptr)
        {
            count++;
            head2 = head2->next;
        }
        return count;
    }
    //принт
    void print()
    {
        int count = 0;
        student<t>* head2;
        head2 = head;
        while (head2 != nullptr)
        {
            cout << head2->number << ' ';
            cout << head2->fio << ' ';
            cout << head2->numb_group << ' ';
            for (int i = 0; i < 5; i++)
                cout << head2->usp[i] << ' ';
            //cout << endl;
            cout << endl;
 
            head2 = head2->next;
        }
        return;
    }
 
    void sort_list()
          {
               //сортировка списка
          }
    
 
};
 
 
ifstream in("database.txt");
int main() {
    list <int> base;
    
    int n;
    in >> n;
    in.get();
    for (int i = 0; i < n; i++)
    {
        int numb;
        string fio;
        string group;
        int arr[5];
        in >> numb;
        in.get();
        getline(in, fio, '\n');
        getline(in, group, '\n');
        for (int j = 0; j < 5; j++)
        {
            in >> arr[j];
            in.get();
        }
        base.push(numb, fio, group, arr[0], arr[1], arr[2], arr[3], arr[4]);
 
    }
    
    
    base.print();
 
    
    system("pause");
    return 0;
}
в database.txt следущие записи :
3
234
Detrov P.A.
PMI12 1 class
5 3 3 3 3
457
Zmishenko V.A.
PMI12 1 class
4 5 3 4 3
198
Voronin N.G.
PMI11 1 class
4 4 4 4 4


Программа считывает все из файла и запихивает в список. Нужно отсортировать этот список по ФИО (fio) .
Все коды что я нашел не могу переделать под свой код ,поэтому думаю что в указателях напортачил или что то вовсе забыл .
Как отсортировать мой список?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2019, 23:16
Ответы с готовыми решениями:

Сортировка односвязного списка
Как можно реализовать сортировку(быструю и пузырьковою в виде функций) структуры односвязного...

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

Сортировка односвязного списка
В условии задачи нужно считать из файла неопределенное количество студентов и занести их в...

Сортировка односвязного списка
Добрый день форумчанам! Есть задача но не знаю как написать ее так как не знаю динамического...

1
557 / 434 / 21
Регистрация: 16.12.2010
Сообщений: 953
09.05.2019, 12:11 2
Вот тебе примитивный пример для понимания
custom_list.h
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
106
107
108
109
110
111
112
#ifndef CUSTOM_LIST_H
#define CUSTOM_LIST_H
#include <memory>
namespace cyberforum {
 
template<class T>
class custom_list
{
    class iterator;
public:
    custom_list()
        : _tail(std::ref(_head))
    {}
    void push_back(const T& val)
    {
        if (_tail.get())
        {
            _tail.get()->next.reset(new node(val));
            _tail = std::ref(_tail.get()->next);
        }
        else
        {
            _head.reset(new node(val));
            _tail = std::ref(_head);
        }
    }
 
    template< class Compare >
    void sort( Compare comp )
    {
        std::reference_wrapper< std::unique_ptr<node> > root = std::ref(_head);
        while(root.get() != _empty)
        {
            std::reference_wrapper< std::unique_ptr<node> > current = std::ref(root);
            std::reference_wrapper< std::unique_ptr<node> > node = std::ref(root);
 
            while(current.get()->next != _empty)
            {
                current = std::ref(current.get()->next);
 
                if (!comp(node.get()->data, current.get()->data))
                {
                    node = std::ref(current);
                }
            }
 
            if (node.get() != root.get())
            {
                node.get().swap(root.get());
                node.get()->next.swap(root.get()->next);
            }
 
            root = std::ref(root.get()->next);
 
        }
    }
 
    void sort() {sort(std::less<T>());}
 
    iterator begin()
    {
        return iterator(_head);
    }
    iterator end()
    {
        return iterator(_empty);
    }
 
private:
    struct node
    {
        T data;
        std::unique_ptr<node> next;
        node(const T& data_) : data(data_) {}
    };
 
    class iterator
    {
    public:
        T& operator*()
        {
            return _pos.get()->data;
        }
        bool operator!=(const iterator& l)
        {
            return _pos.get() != l._pos.get();
        }
        iterator& operator++()
        {
            _pos = std::ref(_pos.get()->next);
            return *this;
        }
    private:
        friend class custom_list;
        iterator(std::unique_ptr<node> &pos)
            : _pos(std::ref(pos))
        {
 
        }
        std::reference_wrapper< std::unique_ptr<node> > _pos;
    };
 
    std::unique_ptr<node> _head;
    std::reference_wrapper< std::unique_ptr<node> > _tail;
    std::unique_ptr<node> _empty;
 
};
 
}
 
 
#endif // CUSTOM_LIST_H
main.cpp
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
#include <iostream>
#include "custom_list.h"
using namespace std;
 
int main(int, char**)
{
    cyberforum::custom_list<int> data;
    data.push_back(10);
    data.push_back(1);
    data.push_back(3);
    data.push_back(1);
    data.push_back(2);
    data.push_back(1);
    data.push_back(5);
 
    std::string comma = "";
    cout << "data: ";
    for(auto &el : data)
    {
        cout << comma << el;
        comma = ", ";
    }
    cout << endl;
 
    data.sort(std::greater<int>());
    comma = "";
    cout << "sort1:";
    for(auto &el : data)
    {
        cout << comma << el;
        comma = ", ";
    }
    cout << endl;
 
    data.sort(std::less<int>());
    comma = "";
    cout << "sort2:";
    for(auto &el : data)
    {
        cout << comma << el;
        comma = ", ";
    }
    cout << endl;
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2019, 12:11
Помогаю со студенческими работами здесь

Сортировка односвязного списка
Здравствуйте уважаемые киберфорумщики! Нужна срочная помощь!!! В общем у меня есть задача которую...

Сортировка односвязного списка
Помогите пишу курсач сделал все ф-ции кроме сортировки в голову не приходит как что не пробовал без...

Сортировка односвязного списка
ребят, нужна помощь, учусь на втором курсе для зачета нужно написать сортировку односвязного...

Сортировка односвязного списка пузырьком
Сортирую список по убыванию пузырьком (он заполняется 46 случайными числами от 1 до 26) Смысл...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru