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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
#1

Рекурсивная функция нахождения максимального элемента в списке - C++

01.06.2011, 15:39. Просмотров 2338. Ответов 2
Метки нет (Все метки)

Саму функцию нахождения максимального элемента написал. Мне только нужно рекурсию сделать. Заранее спасибо.
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
#include "stdafx.h"
#include<iostream>
using namespace std;
#include <stdexcept>
#include <conio.h>
 
 class List 
 {
     // структура элемента списка
     struct Kira 
     {
        int nValue;
        Kira * pNext;
        Kira(int val) : nValue(val), pNext(NULL) {}
    };
    Kira * first, * last; // указатели на первый и последний элементы
    List(const List&); // закрытый конструктор копирования
    public:
        // конструктор по умолчанию
        List() : first(NULL), last(NULL) {}
        // деструктор
        ~List() 
        {
            while ( first )
            {
                last = first->pNext;
                delete first;
                first = last;
            }
        }
        // возвращает true если список пустой
        bool empty() const 
        {
            return first == NULL;
        }
        // добавление элемента в список
        void add(int val)
        {
            Kira * pKira = new Kira(val);
            // если список пустой, вставить первый элемент
            if ( ! first )
            {
                first = pKira;
                last = first;
            }
        // иначе добавить элемент в конец списка
            else 
            {
                last->pNext = pKira;
                last = pKira;
            }
        }
        // максимальное значение в списке
        //-------------------------------------------------------------------- Рекурсия...
        int maxElement() const 
        {
            int maxEl;
            Kira * pKira;
            // если список пустой, выйти с сообщением об ошибке
            if ( empty() )
                throw runtime_error("Пустой список!");
            maxEl = first->nValue;
            for ( pKira = first->pNext; pKira != NULL; pKira = pKira->pNext )
                if ( maxEl < pKira->nValue )
                    maxEl = pKira->nValue;
        return maxEl;
        }
        //_----------------------------------------------------------------------------
 
 
        // поиск элемента с заданным значением. возвращает позицию элемента в списке
        // начиная с 1, или 0, если элемент с заданным значением не найден
        int findElement(int val) const 
        {
            int currentPos, foundPos;
            Kira * pKira;
            // если список пустой, выйти с сообщением об ошибке
            if ( empty() )
                throw runtime_error("Пустой список!");
            foundPos = 0;
            for ( currentPos = 1, pKira = first; pKira != NULL; ++currentPos, pKira = pKira->pNext )
            {
                if ( pKira->nValue == val )
                {
                    foundPos = currentPos;
                    break;
                }
            }
            return foundPos;
        }
 };
 
 int main()
 {
    system ("chcp 1251");
    int val, cnt;
    List list;
    cout << "Колличество элементов в списке: ";
    cin >> cnt;
    for ( int i = 0; i < cnt; ++i )
    {
        cout << "Элемент №" << ( i + 1 ) << ": ";
        cin >> val;
        list.add(val);
    }
    if ( list.empty() )
    {
        cerr << "Ошибка! В списке нет элементов!" << endl;
     return 1;
    }
    val = list.maxElement();
    cout << "Максимальный элемент списка " << val << endl;
    cout << "Это " << list.findElement(val) << endl;
    getch();
 return 0;
 }

Вот отдельно код самой функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int maxElement() const 
        {
            int maxEl;
            Kira * pKira;
            // если список пустой, выйти с сообщением об ошибке
            if ( empty() )
                throw runtime_error("Пустой список!");
            maxEl = first->nValue;
            for ( pKira = first->pNext; pKira != NULL; pKira = pKira->pNext )
                if ( maxEl < pKira->nValue )
                    maxEl = pKira->nValue;
        return maxEl;
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивная функция нахождения максимального элемента в списке (C++):

Рекурсивная функция нахождения максимального и минимального значения - C++
Рекурсивная функция нахождения максимального и минимального значения

Рекурсивная функция нахождения наибол. элемента в массиве - C++
Нужно найти с помощью рекурсии наибольший элемент в массиве. Но код выдает ошибку Сам код: #include &lt;iostream&gt; using namespace...

Рекурсивная функция поиска максимального элемента массива - C++
Написать рекурсивную функцию для вычисления максимального элемента массива из п элементов. выдает ошибки: использована...

Рекурсивная функция для нахождения минимального элемента массива - C++
Помогите!Нужно написать рекурсивную функцию для нахождения минимального элемента массива

Рекурсивная функция для вычисления индекса максимального элемента массива - C++
Написать рекурсивную функцию для вычисления индекса максимального элемента массива из n элементов

Функция нахождения максимального элемента массива - C++
#include &lt;iostream.h&gt; main() {int i, max, A; for(i=1;i&lt;=5;i++) {cout&lt;&lt;&quot;vvedite element massiva: &quot;; cin&gt;&gt;A; if(A&gt;max) max=A;}...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.06.2011, 15:53 #2
смехматично так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int maxElement()
{
    int max_el = first->value;
    find_max(first->next, max_el);
    return max_el;
}
 
int find_max(elem* current, int& max_el)
{
    if (current)
    {
        if (current->value > max_el)
            max_el = current->value;
        find_max(current->next);
    }
}
1
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
01.06.2011, 17:38  [ТС] #3
Угу, спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 17:38
Привет! Вот еще темы с ответами:

Функция нахождения максимального элемента массива - C++
Разработать функцию нахождения максимального элемента массива и применить ее для двух массивов разной длины.

Рекурсифная функция нахождения максимального элемента массива - C++
Нужно найти максимальный элемент в массиве, в принципе все просто, только как написать тоже самое при помощи рекурсивной функции,...

Функция для нахождения индекса максимального элемента массива - C++
Помогите написать функцию для нахождения индекса максимального элемента массива. реализуйте функцию итеративно и рекурсивно. Функция должна...

Функция нахождения максимального элемента массива(ошибка при выводе) - C++
Срочно! Помогите найти ошибку! Подозреваю,что ошибка в функции,но найти ее там я не могу... Выводит не то число... Вот код: #include...


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

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

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