Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 355
#1

Как сделать сортировку по узлам в односвязном списке? - C++

23.11.2016, 20:44. Просмотров 149. Ответов 7
Метки нет (Все метки)

Есть задача: отсортировать узлы по возрастанию в односвязном списке. Есть код, но при его выполнении вылетает ошибка:
Вызвано исключение по адресу 0x00BC29C1 в ConsoleApplication6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.

Сам код:
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
if (head != NULL) {
        Node *cur = new Node;
        Node *g;
        Node *pred;
        Node *b;
 
        for (int i = 0; i < valcount; i++) {
            pred = head;
            cur = head->next;
            if (pred->item < cur->item) {
                g = pred;
                b = cur->next;
                pred = pred->next;
                g->next = b;
                pred->next = g;
                head = pred;
            }
            pred = head;
            cur = head->next;
            for (int j = 0; j < valcount - 2; j++) {
                if (cur->next->item > cur->item) {
                    g = cur;
                    b = cur->next->next;
                    pred->next = cur->next;
                    cur = pred->next;
                    g->next = b;
                    cur->next = g;
                }
                pred = pred->next;
                cur = cur->next;
            }
        }
        cur->next = NULL;
    }
Думаю, еще понадобится код заполнения списка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (int i = 0; i < size; i++)
        {
            Node *pv = new Node;
                if (head == NULL) {
                pv->next = NULL;
                head = pv;
                pred = pv; valcount++;
                }
                else {
                pv->next = head->next;
                pv->next = head;
                head = pv;
                valcount++;
                }
            cin >> pv->item;
            valcount++;
        }
Добавлено через 1 час 0 минут
Неужели никто не знает, как сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2016, 20:44     Как сделать сортировку по узлам в односвязном списке?
Посмотрите здесь:

Как можно сместить ID в односвязном списке после удаление элемента - C++
народ можете подсказать как можно сместить айди в односвязном списке послу удаление элемента, на пример у меня там были айди 1, 2, 3, 4 ...

Как в односвязном списке поменять местами один элемент и следующий за ним? - C++
Напр., что есть: 0 1 2 3 4 5 6 7 должно быть: 0 1 2 3 4 6 5 7

Ошибка в односвязном списке - C++
Помогите решить эти 2 проблемы C4101: NextNode: неиспользованная локальная переменная (в 118 строке) C4703: используется потенциально...

Ошибка в односвязном списке - C++
#include&lt;iostream&gt; #include&lt;clocale&gt; using namespace std; #define DEBUG class Monom{ protected: int...

Поиск и удаление в односвязном списке - C++
Помогите с удаление элемента по ключу(номеру этажа). При удалении 2-го элемента в списке, удаляется вместе с 1-ым, но если удалять 3, то 2...

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

Удаление по ключу в односвязном списке - C++
Написал алгоритм удаления по ключу в линейном, односвязном списке, но он не удаляет, а коверкает записи. Помогите разобраться.. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nimazzzy
Заблокирован
23.11.2016, 20:49     Как сделать сортировку по узлам в односвязном списке? #2
Цитата Сообщение от DenKG Посмотреть сообщение
Неужели никто не знает, как сделать?
Никто не хочет анализировать твой код. Его даже скомпилировать и прогнать нельзя, потому что он не полный. Неужели так сложно воспользоваться дебаггером?
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 355
23.11.2016, 20:56  [ТС]     Как сделать сортировку по узлам в односвязном списке? #3
Цитата Сообщение от nimazzzy Посмотреть сообщение
Никто не хочет анализировать твой код. Его даже скомпилировать и прогнать нельзя, потому что он не полный. Неужели так сложно воспользоваться дебаггером?
Если бы я мог так исправить ошибку, то я бы сюда не обращался.
nimazzzy
Заблокирован
23.11.2016, 21:06     Как сделать сортировку по узлам в односвязном списке? #4
Сделай сначала так, чтобы твой код заработал, когда у тебя в списке хотя бы один элемент. В твоем коде cur при сортировке станет указывать на NULL после
cur = head->next;

Зачем выделять память под ноду для cur, если ты потом его на другой объект меняешь?
Что делают две подряд такие строчки?
Цитата Сообщение от DenKG Посмотреть сообщение
pv->next = head->next;
pv->next = head;
zer0mail
24.11.2016, 08:50
  #5

Не по теме:

Цитата Сообщение от DenKG Посмотреть сообщение
Если бы я мог так исправить ошибку, то я бы сюда не обращался.
Если не можешь освоить дебаггер, забудь С++, как страшный сон.

Bretbas
189 / 48 / 7
Регистрация: 05.08.2013
Сообщений: 766
Завершенные тесты: 1
24.11.2016, 09:14     Как сделать сортировку по узлам в односвязном списке? #6
DenKG, STL нельзя использовать? Зачем велосипед делать?
Или это задача из школы/колледжа/института?
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 355
24.11.2016, 09:20  [ТС]     Как сделать сортировку по узлам в односвязном списке? #7
Институт
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2016, 09:58     Как сделать сортировку по узлам в односвязном списке?
Еще ссылки по теме:

Использование деструктора в односвязном списке с++ - C++
Здравствуйте. Нужна срочная помощь!!! Есть реализация односвязного списка в котором узел - класс, а не структура. Вначале программы...

Удаление узлов в односвязном списке - C++
Помогите пожалуйста, не могу понять что не так. Нужно удалить узлы содержащие простые числа.Программа не удаляет! #include&lt;iostream&gt; ...

Удаление повторяющихся элементов в односвязном списке - C++
Добрый день! Задание такое: построить линейный список из нескольких динамических переменных, содержащих вводимые целые числа....

Ошибка с удалением элемента в односвязном списке - C++
Здравствуйте! Вроде написал функцию удаления элемента в указанной позиции, но почему то не срабатывает. Где ошибка?Или если есть вариант...

В односвязном списке поменять местами крайние элементы - C++
что есть у меня: #include &lt;iostream&gt; #define N 6 using namespace std; struct Node { int d; Node*next; }; Node *...


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

Или воспользуйтесь поиском по форуму:
_Scorpius_
49 / 49 / 24
Регистрация: 01.04.2015
Сообщений: 103
24.11.2016, 09:58     Как сделать сортировку по узлам в односвязном списке? #8
Функции работы со списком:
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
struct node
{
    int   value;
    node* next;
};
 
// добавить элемент в список
node* AddNode(node *lst, int val)
{
    node* newHead = new node;
    newHead->value = val;
    newHead->next = lst;
    return newHead;
}
 
// удалить элемент из списка
node* DeleteNode(node *lst)
{
    if (lst && lst->next)
    {
        node* tail = lst;
        while(tail->next->next != NULL)
            tail = tail->next;
        delete tail->next;
        tail->next = NULL;
    }
    else
    {
        delete lst;
        lst = NULL;
    }
    return lst;
}
 
// сортировать список
void SortList(node *lst)
{
    int tmpValue = 0;
    node *tmpList_0 = lst;
    node *tmpList_1;
    while(tmpList_0)
    {
        tmpList_1 = tmpList_0->next;
        while(tmpList_1)
        {
            if(tmpList_1->value > tmpList_0->value)
            {
                tmpValue = tmpList_0->value;
                tmpList_0->value = tmpList_1->value;
                tmpList_1->value = tmpValue;
            }
            tmpList_1 = tmpList_1->next;
        }
        tmpList_0 = tmpList_0->next;
    }
}
 
// просмотр списка
void ViewList(const node *lst)
{
    while(lst)
    {
        std::cout << lst->value << ' ';
        lst = lst->next;
    }
}
Yandex
Объявления
24.11.2016, 09:58     Как сделать сортировку по узлам в односвязном списке?
Ответ Создать тему
Опции темы

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