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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм удаления записи из базы данных http://www.cyberforum.ru/cpp-beginners/thread310106.html
У меня есть алгоритм записи в файл: void Add(Abbase& d, int& ch) { system ("cls"); ofstream fout("base.txt",ios::app); cout <<"Abbase 0.21 beta 2"<<endl; cout <<"Добавление в базу:\n\n";...
C++ Задание по файлам Подскажите пожалуйста! В магазине имеются различные товары, причем каждому товару в качестве названия присвоен целочисленный код. Для контроля за наличием товара создаетс ЛИТЕРНЫЙ файл, состоящий... http://www.cyberforum.ru/cpp-beginners/thread310104.html
Упорядочить список студентов по году рождению C++
Язык Си Дан файл, содержащий сведение о студентах, включающие в себя его фамилию имя, год рождение, номер группы и оценки, по каким либо трем предметам. Составить программу, которая выводит:...
Обработка типизированных файлов C++
Язык Си Разроботать алгоритм и программу для решение задачи по оброботке типизированных файлов Число компонент файла f, компонентами которого являются целые числа, кратно 10. Переписать компоненты...
C++ Как спросить у программы: "Если существует соседний элемент массива по вертикали или горизонтали, то ..." http://www.cyberforum.ru/cpp-beginners/thread310095.html
Как спросить у программы: "Если существует соседний элемент массива по вертикали или горизонтали, то ..." Собственно пробывал так: for (i=0;i<10;i++) for (j=0;j<10;j++) ...
C++ Графика! Составить программу вывода на экран дисплея настольных электронных часов и изображения метронома. При нажатии клавиши ВВОД стрелка метронома начинает колебательное движение, синхронно с которым... подробнее

Показать сообщение отдельно
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10

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

01.06.2011, 15:39. Просмотров 2365. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru