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

Создать стек из целых чисел. Поменять в неё максимальный и минимальный элементы местами

19.05.2019, 20:00. Показов 1250. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Код программы
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
#include "stack.cpp"
 
void Swap(Stack *Head) {
    Stack *pmin = Head;
    Stack *pmax = Head;
    Stack *ptr = Head;
    while (ptr) {
        if (ptr->Data > pmax->Data) {
            pmax = ptr;
        }
        if (ptr->Data < pmin->Data) {
            pmin = ptr;
        }
        ptr = ptr->Next;
    }
    std::iter_swap(pmin, pmax); // #include <algorithm>
}
 
int main() 
{
    Stack t, r;
    int i;
    int min, max;
 
    ifstream in("input.txt");
    ofstream out("output.txt");
 
    while (in >> i) // считываем из входного файла в стек
    {
        t.Push(i);
    }
 
    in.close();
 
    while (!t.Empty()) // считываем из стека в стек, чтобы элементы встали обратно в перв. порядок
    {
        i = t.Pop();
        r.Push(i);
    }
 
    while (!r.Empty()) // считываем из стека в выходной файл
    {
        out << r.Pop() << " ";
    }
 
    out.close();
    system("pause");
    return 0;
}
Код стека
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
class Stack 
{
    struct Element 
    {
        int inf;
        Element *next;
        Element(int x, Element *p) : inf(x), next(p) 
        {
 
        }
    };
    Element *head;
public:
    Stack() :head(0) 
    {
 
    }
    bool Empty() 
    {
        return head == 0;
    }
    int Pop() 
    {
        if (Empty()) 
        {
            return 0;
        }
        
            Element *r = head;
            int i = r->inf;
            head = r->next;
            delete r;
            return i;
        
    }
    void Push(int data) 
    {
        head = new Element(data, head);
    }
    int Top() 
    {
        if (Empty()) 
        {
            return 0;
        }
        else 
        {
            return head->inf;
        }
    }
};
Добавлено через 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
#include <iostream>
#include <fstream>
 
using namespace std;
 
#include "stack.cpp"
 
int main() 
{
    Stack t, r;
    int i;
 
    ifstream in("input.txt");
    ofstream out("output.txt");
 
    while (in >> i) // считываем из входного файла в стек
    {
        t.Push(i);
    }
 
    in.close();
 
    int min = 2;
    int max = 2;
 
    while (!t.Empty()) // считываем из стека в стек, чтобы элементы встали обратно в перв. порядок
    {
        i = t.Pop();
        if (i <= min)  min = i; 
        if (i >= max)  max = i;
        
    }
 
    while (!r.Empty()) // считываем из стека в выходной файл
    {
        out << r.Pop() << " ";
    }
 
    out.close();
    return 0;
}
Добавлено через 37 минут
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
#include "stack.cpp"
 
int main() 
{
    Stack t, r;
    int i;
 
    ifstream in("input.txt");
    ofstream out("output.txt");
 
    int min = 2;
    int max = 2;
 
    while (in >> i) // считываем из входного файла в стек, ищем минимум и максимум
    {
        t.Push(i);
        if (i <= min)  min = i;
        if (i >= max)  max = i;
    }
 
    in.close();
 
    while (!t.Empty()) // считываем из стека в стек, чтобы элементы встали обратно в перв. порядок, делаем замену мин на макс и макс на мин
    {
        i = t.Pop();
        if (i == min) { r.Push(max); }
        if (i == max) { r.Push(min); }
        r.Push(i);
    }
 
    while (!r.Empty()) // считываем из стека в выходной файл
    {
        out << r.Pop() << " ";
    }
 
    out.close();
    return 0;
}
Теперь программа уже ставит на место минимальный и максимальный элементы, но старые значения перед новыми остаются
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2019, 20:00
Ответы с готовыми решениями:

Создать однонаправленный список из целых чисел. Поменять в нём максимальный и минимальный элементы местами
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; ifstream in(&quot;input.txt&quot;); ofstream...

В массиве целых чисел поменять местами минимальный и максимальный элементы
Эту задачу можно как нибудь упростить? #include &lt;stdio.h&gt; #define N 3 #define M 3 struct index{ int i; int j; ...

В массиве целых чисел поменять местами максимальный и минимальный элементы
В массиве целых чисел поменять местами максимальный и минимальный элементы. Помогите пожалуйста.

3
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.05.2019, 11:12
Я
Цитата Сообщение от _karnaval_ Посмотреть сообщение
Теперь программа уже ставит на место минимальный и максимальный элементы, но старые значения перед новыми остаются
Я правильно понимаю, что под минимальным и максивальным здесь имеется ввиду первый и последний? Т.е. - поменять местами первый и последний элементы?
0
1 / 1 / 0
Регистрация: 22.12.2018
Сообщений: 58
20.05.2019, 14:25  [ТС]
Нет, программа должна находить в стеке наибольшее значение и наименьшее, они могут находится в в любом месте в стеке, и менять их местами
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.05.2019, 17:03
Цитата Сообщение от _karnaval_ Посмотреть сообщение
Нет, программа должна находить в стеке наибольшее значение и наименьшее, они могут находится в в любом месте в стеке, и менять их местами
Тогда Pop/Push тут не помогут, в односвязном списе.
Здесь надо искать элементы, у которых сдедующий (p->next) минимальный/максимальный и менять их местами.
Для начала сделать, чтобы Stack::Head всегда существовал и никогда не использовался
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public:
    Stack(): head(new Element(0, nullptr))
    {
    }
    
    bool Empty()
    {
        return head->m_next == 0;
    }
    
    int Pop()
    {
        if (Empty())
        {
            return 0;
        }
 
        Element *r = head->next;
        int i = r->inf;
        head->next = r->next;
        delete r;
        return i;
    }
Добавлено через 1 минуту
Потом сделать поиск предыдущих элеметов для минимального/максимального
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Element *find_prev_min()
    {
        if (!head->next)
            return head;
 
        Element *prev_min = head;
        for (Element *p = head->next; p->next != nullptr; p = p->next)
            if (p->next->inf < prev_min->next->inf)
                prev_min = p;
 
        return prev_min;
    }
 
    Element *find_prev_max(); //Аналогично
Добавлено через 54 секунды
Потом вставку/удаление
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Element *pop_next(Element *it)
    {
        if (!it->next)
            return nullptr;
 
        Element *next = p->next;
        it->next = it->next->next;
        return next;
    }
 
    void insert_after(Element *it, Element *p)
    {
        if (!p)
            return;
 
        p->next = it->next? it->next->next: nullptr;
        it->next = p;
    }
Добавлено через 26 секунд
Ну и наконец
C++
1
2
3
4
5
6
7
8
9
10
11
    void swap_minmax()
    {
        Element *prev_min = find_prev_min();
        Element *min = pop_next(prev_min);
 
        Element *prev_max = find_prev_max();
        Element *max = pop_next(prev_max);
 
        insert_after(prev_max, min);
        insert_after(prev_min, max);
    }
Добавлено через 49 секунд
Код не проверял, может и не работать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2019, 17:03
Помогаю со студенческими работами здесь

В массиве целых чисел поменять местами минимальный и максимальный элементы
Одномерный массив-Вычислить среднее арифметическое элементов массива Х, расположенных между его минимальным и максимальным значениями. Если...

В массиве А из 12 целых чисел поменять местами максимальный и минимальный элементы
«Обработка одномерных массивов»: В массиве А из 12 целых чисел поменять местами максимальный и минимальный элементы, а все элементы,...

В массиве целых чисел найти минимальный и максимальный элементы и поменять их местами
помогите пожалуйста написать это на C В массиве целых чисел найти Минимальный и максимальный элементы и поменять их местами

В массиве целых чисел найти минимальный и максимальный элементы и поменять их местами
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include &lt;stdlib.h&gt; int main() { int *a; int i, n, min, max; ...

В заданной конечной последовательности целых чисел найти минимальный и максимальный элементы и поменять их местами
В заданной конечной последовательности целых чисел найти минимальный и максимальный элементы и поменять их местами. Помогите пожалуйста,...


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

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

Новые блоги и статьи
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab - CI/ CD in GitLab - VCS repository management in Visual Studio code (see attachments)
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru