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

Добавить элементы в связанный список в порядке его сортировки

05.08.2016, 12:31. Просмотров 310. Ответов 8
Метки нет (Все метки)

Хэлп! Вот условие: Напишите программу, которая добавляет элементы в связанный список в порядке его сортировки, а не в начало.
Я с ней перемучался, пробовал сортировку, но видно что-то не так делал - она крашилась постоянно, ошибку показывало в 47 строке. ЕСЛИ МОЖНО, ТО ПОМОГИТЕ БЕЗ СОРТИРОВКИ, вот код на всякий:
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
#include <iostream>
#include <string>
#include <cstdlib>
#include <clocale>
#include <windows.h>
#include <cstddef>
 
using namespace std;
 
struct elements
{
    int num;
    elements *p_next_num;
};
elements *p_head = new elements;
elements *p_temp = NULL;
elements *p_tek = NULL;
 
elements* newNum()
{
    elements* p_num = new elements;
    cout << "Введите значение - ";
    cin >> p_num->num;
    p_num->p_next_num = NULL;
    p_temp = p_num;
    return p_num;
}
 
void printList()
{
    p_temp = p_head;
    while(p_temp != NULL)
    {
        cout << p_temp->num;
        p_temp = p_temp->p_next_num;
    }
}
 
void sort()
{
    p_temp = p_head;
    int one, two;
    while(p_temp != NULL)
    {
        p_tek = p_temp->p_next_num;
        one = p_temp->num;
        two = p_tek->num;
        if(one > two)
        {
            elements* tem = p_temp;
            p_temp = p_tek;
            p_tek = tem;
        }
        else
            p_temp = p_temp->p_next_num;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "Введите первое значение - ";
    cin >> p_head->num;
    p_head->p_next_num = NULL;
    for(int i = 1; i < 3; i++)
    {
        newNum();
    }
    p_head->p_next_num = p_temp;
    sort();
    printList();
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2016, 12:31
Ответы с готовыми решениями:

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

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

Двусвязный список(добавить метод сортировки списка)
Постановка задачи. Разработать шаблон класса «Двусвязный список», включающий в себя необходимый...

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

Список: в конец непустого списка L добавить все его элементы, располагая их в обратном порядке
Пусть L обозначает кольцевой двунаправленный список с заглавным звеном.Используя функцию или...

8
Bonya2
1 / 1 / 0
Регистрация: 01.08.2016
Сообщений: 15
Завершенные тесты: 1
05.08.2016, 12:36 2
Цитата Сообщение от hax0r Посмотреть сообщение
two = p_tek->num;
Может указатель p_tek нулевой, и из-за этого ошибка. (это в 47 строке)
0
hax0r
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
05.08.2016, 20:24  [ТС] 3
Добавлено через 1 минуту
Bonya2, так я же в 45 строке ему присвоил значение
0
Bonya2
1 / 1 / 0
Регистрация: 01.08.2016
Сообщений: 15
Завершенные тесты: 1
06.08.2016, 10:05 4
hax0r, и что? проверки то нет. Вполне возможно что в 45 строке указатель p_tek обнулился. см. комментарии

Цитата Сообщение от hax0r Посмотреть сообщение
C++
1
2
3
while(p_temp != NULL)
* * {
* * * * p_tek = p_temp->p_next_num;// 1. p_temp не равен NULL 2. А какое значение у p_temp->p_next_num?
0
06.08.2016, 10:05
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.08.2016, 10:24 5
Зачем заводить адрес на самого себя, если можно просто обратиться к адресу структуры?
0
Bonya2
1 / 1 / 0
Регистрация: 01.08.2016
Сообщений: 15
Завершенные тесты: 1
06.08.2016, 10:32 6
DemolitionMan, для создания списка структур, когда неизвестно кол-во узлов в списке. Указатели на самого себя держат связь между узлами. Как то так
0
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.08.2016, 11:29 7
Вы что не можете написать программу, где числа должны располагаться в одномерном массиве(риторический вопрос)? Сортировку смотрите здесь между шапкой и форумом, а вставлять просто.

Добавлено через 36 минут
А если Вас попросить 3-хмерный движок написать.
0
hax0r
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 45
06.08.2016, 13:36  [ТС] 8
DemolitionMan, а мне не нужен одномерный массив, а то что здесь одни числа используются это я так, для пробы.
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
07.08.2016, 16:27 9
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
///////////////////////////////////////////////////////////////////////////////
//2.
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
///////////////////////////////////////////////////////////////////////////////
struct  T_elem;
///////////////////////////////////////////////////////////////////////////////
typedef T_elem*         T_list;
///////////////////////////////////////////////////////////////////////////////
struct  T_elem
{
    int     val_;
    T_list  list_next_;
    //-------------------------------------------------------------------------
    T_elem
        (
            int     val,
            T_list  list_next   =   nullptr
        )
        :
        val_        ( val ),
        list_next_  ( list_next )
    {}
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
class   T_list_obj
{
    //-------------------------------------------------------------------------
    T_list   head_list_{};
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    bool    empty()
    {
        return  !head_list_;
    }
    //-------------------------------------------------------------------------
    void    sort_insert( int    val )
    {
        if  (
                is_next_list_for_val
                    (
                        head_list_,
                        val
                    )
            )
        {
            insert_val_in_head_of
                (
                    val,
                    head_list_
                );
 
            return;
        }//if
 
        auto    list_cur( head_list_ );
 
        while   (
                    ! is_next_list_for_val
                        (
                            list_cur->list_next_,
                            val
                        )
                )
        {
            list_cur    =   list_cur->list_next_;
        }
 
        insert_val_in_head_of
            (
                val,
                list_cur->list_next_
            );
    }
    //-------------------------------------------------------------------------
    bool    is_next_list_for_val
        (
            T_list  list,
            int     val
        )
    {
        return      ! list
                ||  val     <=  list->val_;
    }
    //-------------------------------------------------------------------------
    void    insert_val_in_head_of
        (
            int         val,
            T_list  &   list
        )
    {
        list    =   new     T_elem  (
                                        val,
                                        list
                                    );
    }
    //-------------------------------------------------------------------------
    void    print()
    {
        auto    list_cur    =   head_list_;
 
        while( list_cur )
        {
            std::cout   <<  list_cur->val_
                        <<  '\t';
 
            list_cur    =   list_cur->list_next_;
        }//while
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
int     input_and_get_int_val_with_prompt( T_str    const   &   prompt )
{
    std::cout   <<  prompt;
    int     val{};
    std::cin    >>  val;
    return  val;
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
    auto    list_size   =   input_and_get_int_val_with_prompt( "list size = " );
 
    std::cout   <<  "Enter "
                <<  list_size
                <<  " int values:"
                <<  std::endl;
 
    T_list_obj  list_obj;
 
    for( int  i{}; i < list_size; ++i )
    {
        list_obj.sort_insert
            (
                input_and_get_int_val_with_prompt
                    (
                            "val_"
                        +   std::to_string( i + 1 )
                        +   " = "
                    )
            );
    }
 
    if  (
            ! list_obj.empty()
        )
    {
        list_obj.print();
    }
    else
    {
        std::cout   <<  "List is empty."
                    <<  std::endl;
    }
}
0
07.08.2016, 16:27
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 16:27

В конце списка добавить все его элементы, располагая их в обратном порядке
например по списку 1 2 3 требуется построить список из элементов 1 2 3 3 2 1

Расставить элементы массива в порядке возрастания методом сортировки выбором и сортировки простыми вставками
Здрасьте еще раз!С прошедшим вас праздником! я глупая и бестолковая опять пришла к вам на...

Добавить подпрограмму сортировки таблицы в порядке убывания среднего балла
В данную программу добавить подпрограмму сортировки таблицы в порядке убывания среднего балла.


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

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

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