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

Односвязный список. Максимальный элемент

10.04.2017, 20:24. Показов 1295. Ответов 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
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
#include <iostream>
using namespace std;
 
struct A
{
    int key; //поле key
};
 
struct List // создание списка
{
    A a; // элемент структуры
    List* next; // указатель на следующий элемент списка
};
 
void Print(List *b)//вывод списка, это функция не меняет список
{
    List *print = b; // создаем вспомогательный указатель, указывает на первый элемент b
    while (print)
    {
        cout << print->a.key << " -> ";
        print = print->next;
    }
    cout << "NULL\n";
}
 
void Init(List **begin)
{
    *begin = new List; // создаем первый элемент списка
    A a[5] = { 23,38,47,79,98 }; //инициализация структуры
 
    (*begin)->a.key = 20; // присвоили значение в адрес
    (*begin)->next = NULL; // следующий адрес пока не известен
 
    List *end = *begin; // указатель на конец списка
 
    for (int i(0); i < 5; i++)
    {
        end->next = new List; // есть следующий элемент списка
        end = end->next;
        end->a = a[i]; // вносим значения
        end->next = NULL;
    }
}
 
void Insert(List **begin, const A &a)
{
    List *ins = new List;
    ins->a = a;
    if (*begin == NULL)
    {
        ins->next = NULL;
        *begin = ins;
        return;
    }
 
    List *t = *begin;
    if (t->a.key >= ins->a.key) // если первый элемент больше вставляемого элемента..
    {
        ins->next = t;
        *begin = ins;
        return;
    }
 
    List *t1 = t->next;
    while (t1)
    {
        if (t->a.key < ins->a.key && ins->a.key <= t1 ->a.key )
        {
            t->next = ins;
            ins->next = t1;
            return;
        }
        t = t1;
        t1 = t1->next;
    }
    t->next = ins;
    ins->next = NULL;
}
 
void Delete(List **begin, const A &a)
{
    if (*begin == NULL)
    {
        return;
    }
    List *t = *begin;
    if (t->a.key == a.key)
    {
        *begin = t->next;
        delete t;
        return;
    }
    List *t1 = t->next;
    while (t1)
    {
        if (t1->a.key == a.key)
        {
            t->next = t1->next;
            delete t1;
            return;
        }
        t = t1;
        t1 = t->next;
    }
}
 
void Free(List **begin)
{
    if (*begin == 0) return;
    List *p = *begin;
    List *t;
    while (p)
    {
        t = p;
        p = p->next;
        delete t;
    }
    *begin = NULL;
}
 
int MaxElem(List **begin)
{
    int max;
 
    if (*begin == NULL)
        return;
 
    List *t = *begin;
    max = t->a.key;
    while (t != NULL)
    {
        if (t->a.key > max)
            max = t->a.key;
            t = t->next;
    }
    return max;
}
 
int main()
{
    
    List* begin = NULL;// указатель на первый элемент списка
    A a = { 86 }, b = { 79 };
    Init(&begin);
    Print(begin);
    Insert(&begin,a);
    Print(begin);
    Delete(&begin, b);
    Print(begin);
    Free(&begin);
    Print(begin);
    int max = MaxElem(&begin);
    cout << max;
    cout << endl;
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2017, 20:24
Ответы с готовыми решениями:

Односвязный список: удалить k-й элемент и вставить m элементов в конец
Необходимо создать односвязный список с полями ФИО, дата рождения, ЗП удалить к-й элемент и...

Односвязный список: аменить каждый элемент списка, состоящий из символов, на предыдущий символ алфавита
Ребят помогите кто ( Заменить каждый элемент списка, состоящий из символов, на предыдущий символ...

В целочисленном массиве M(n) найти максимальный элемент среди четных элементов массива и максимальный элемент
В целочисленном массиве M(n) найти максимальный элемент среди четных элементов массива и...

Не находится максимальный элемент второй матрицы, вместо него выдаётся максимальный элемент первой
Не находится максимальный элемент второй матрицы, вместо него выдаётся максимальный элемент первой....

1
Модератор
9478 / 4802 / 3210
Регистрация: 17.08.2012
Сообщений: 15,036
11.04.2017, 00:52 2
Вот мне тоже непонятно, что делает кросспост Вашей темы из "C++ для начинающих" Найти максимальный элемент односвязного списка в паскалевском разделе?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2017, 00:52
Помогаю со студенческими работами здесь

Какой из элементов больше: максимальный элемент главной или максимальный элемент побочной диагонали
Для матрицы размерностью n×n (n – нечетное значение) определить, какой из элементов больше:...

Дан список L, элементы которого являются действительными числами. Удалить максимальный элемент
Дан список L, элементы которого являются действительными числами. Удалить максимальный элемент

В массиве найти максимальный элемент в первой половине и максимальный элемент во второй
Доброго времени суток! НЕ могу написать код программы к задаче все не удачные попытки написания...

Найти максимальный элемент массива и его индекс. Максимальный элемент я нашел , не получается вывести индекс
var i,max: integer; x: array of integer; begin randomize; max:=x; for i:=1 to 5 do begin...


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

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

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