Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.12.2021
Сообщений: 1

Функция обмена текущего и следующего за ним элементов стека

26.12.2021, 17:36. Показов 990. Ответов 4
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, не понимаю как прикрутить к коду функцию обмена текущего и следующего за ним элементов стека
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <fstream>
#include <time.h>
#include <locale.h>
 
using namespace std;
 
 
 
 
 
struct Stack { 
    int info;
    Stack* next;
 
} *beg, *t;
 
 
 
void View(Stack*);
void DelAll(Stack**);
Stack* InStack(Stack* p, int in);
void save(Stack** p);
 
int main()
{
    
 
    setlocale(LC_ALL, "RUS");
    cout << "Программа 'Стек' " << endl;
 
    srand(time_t(NULL));
    int i, in, kod, var, add, add1, n = 5;
    while (true) {
        cout << "\n\tСоздать\t - 1.\n\tДобавить\t - 2.\n\tПоказать\t - 3.\n\tУдалить\t -  4.\n\tEXIT\t - 0. :";
        cin >> kod;
        switch (kod)
        {
        case 1:if (kod == 1 && beg != NULL)
        {
            cout << "Пусто!" << endl; break;
        }
               cout << "Введите размер стека ";
               cin >> var;
               n = var;
               
               for (i = 1; i <= n; i++)
               {
                   in = rand() % 100;
                   beg = InStack(beg, in);
               }
               cout << "Стек состоит из " << n << " элементов ";
               break;
        case 2:
            if (kod == 2 && beg != NULL)
                cout << "Введите размер стека ";
            cin >> add1;
            add = add1;
            for (i = 1; i <= add; i++)
            {
                in = rand() % 21;
                beg = InStack(beg, in);
            }
 
            cout << "Добавить " << add << endl;
            break;
 
        case 3: if (!beg) {
            cout << " Стек пуст" << endl; View(beg);
            break;
        }
                cout << "____Стек____ " << endl;
                View(beg); break;
        case 4: DelAll(&beg);
            cout << "Память освобождена" << endl; break;
    
        case 0: if (beg != NULL) DelAll(&beg);
            system("pause");
            return 0;
        }
    }
}
 
 
// Функция добавления элемента в стек
Stack* InStack(Stack* p, int in)
{
    Stack* t = new Stack; //Захватываем память для элемента
    t->info = in; 
    t->next = p; 
    return t;
}
 
// Функция просмотра стека
void View(Stack* p)
{
    Stack* t = p; while (t != NULL)
    {
        cout << " " << t->info << endl; t = t->next;
    }
}
 
// Функция освобождения памяти
void DelAll(Stack** p)
{
    Stack* t;
    while (*p != NULL) {
 
        t = *p;
        *p = (*p)->next;
        delete t;
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2021, 17:36
Ответы с готовыми решениями:

Исключение указанного и следующего за ним элементов в списке
Не получается дописать две процедуры, одна удаляет указанный элемент, а другая удаляет элемент, следующий за ним Вот собственно сами...

Реализовать функцию помещения в стек, изъятия из стека, получение текущего количества элементов
Доброго всем. Не могу написать прогу, на динамику вообще ничего не получается сделать. Просмотрел много литературы и все равно не...

Запуск следующего .swf файла из текущего
Добрый вечер, уважаемые форумчане. Прошу вашей помощи или совета в следующем вопросе: У кассовой системы есть промо монитор для...

4
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
27.12.2021, 07:24
В первом приближении то, что вы написали не должно работать.

На коленке набросал для вас:
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
#include <iostream>
 
template<typename T>
class Stack {
public:
    Stack(std::size_t maxSize): maxSize{maxSize}, size{0}, data{new T[maxSize]} {}
    Stack(const Stack<T> &o): maxSize{o.maxSize}, size{o.size}, data{new T[maxSize]} {
        for (std::size_t i = 0; i < size; ++i) {
            data[i] = o.data[i];
        }
    }
    Stack<T> &operator=(const Stack<T> &o) {
        if (&o != this) {
            delete[] data;
            maxSize = o.maxSize;
            size = o.size;
            data = new T[maxSize];
            for (std::size_t i = 0; i < size; ++i) {
                data[i] = o.data[i];
            }
        }
        return *this;
    }
    ~Stack() {
        delete[] data;
    }
 
    // добавление в стек
    void push(const T &value) {
        if (size >= maxSize) {
            throw std::overflow_error("stack overflow");
        }
        data[size++] = value;
    }
 
    // удаление из стека
    void pop() {
        if (size <= 0) {
            throw std::underflow_error("stack underflow");
        }
        --size;
    }
 
    // просмотр верхнего элемента
    const T &top() const {
        if (size <= 0) {
            throw std::underflow_error("stack underflow");
        }
        return data[size-1];
    }
 
    const T &operator[](std::size_t n) const {
        return data[n];
    }
 
    std::size_t getSize() const {
        return size;
    }
 
    std::size_t getMaxSize() const {
        return size;
    }
 
    bool isEmpty() const {
        return size == 0;
    }
 
private:
    std::size_t size;
    std::size_t maxSize;
    T *data;
};
 
template<typename T>
std::ostream& operator<<(std::ostream &out, const Stack<T> &stack) {
    out << "[";
    for (std::size_t i = 0; i < stack.getSize(); ++i) {
        out << stack[i];
        if (i + 1 < stack.getSize()) {
            out << ", ";
        }
    }
    return out << "]";
}
 
int main() {
 
    Stack<int> s{10};
    s.push(1);
    s.push(2);
    s.push(3);
 
    std::cout << s << std::endl;
 
    // обмен местами
    int a = s.top();
    s.pop();
    int b = s.top();
    s.pop();
    s.push(a);
    s.push(b);
 
    std::cout << s << std::endl;
 
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
27.12.2021, 08:03
Лучший ответ Сообщение было отмечено vlisp как решение

Решение

Цитата Сообщение от lemegeton Посмотреть сообщение
В первом приближении то, что вы написали не должно работать.
Это почему это?

Цитата Сообщение от lemegeton Посмотреть сообщение
На коленке набросал для вас:
Зачем? Какое отношение этот код имеет к исходному коду из вопроса?

Цитата Сообщение от Dscar Посмотреть сообщение
не понимаю как прикрутить к коду функцию обмена текущего и следующего за ним элементов стека
Добавить функции извлечения верхнего элемента стека. Извлеть два верхних элемента. Добавить их в стек в обратном порядке.
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,377
27.12.2021, 08:28
Цитата Сообщение от lemegeton Посмотреть сообщение
if (size <= 0)
мракобесие какое-то. вообще вся тема - мракобесие, ну, кроме последнего сбщ. впрочем если все объединить выборочно, то может и выйдет толк. как обычно вопрос плевый и ленивый, нелюбопытный студиозиус. Ясно же что не он это все набросал. где-то взял и завис.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
27.12.2021, 09:09
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Какое отношение этот код имеет к исходному коду из вопроса?
Мой код отвечает на вопрос.
Код, приведённый ТС где-то скопированное что-то относящееся к теме.
Со всей очевидностью ТС к этому коду имеет очень мало отношения.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это почему это?
Потому что в нём нет функционала pop и top, например.

Цитата Сообщение от vlisp Посмотреть сообщение
мракобесие какое-то. вообще вся тема - мракобесие,
Цитата Сообщение от Капитан Смоллетт
Мне не нравится этот корабль! Мне не нравятся эти матросы! Мне не нравится эта экспедиция! И Что?! А, да! Мне вообще ничего не нравится, сэр!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2021, 09:09
Помогаю со студенческими работами здесь

Функция удаления из стека элементов по условию
Здравствуйте! Написал программу заполнения стека элементами. Не могу написать функцию удаления четных элементов стека. Help. ...

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

Функция для обмена элементов в массиве структур
Пытаясь написать функцию сортировки массива из структур столкнулся с проблемой. Вот вид функции для обмена элементов: void swap...

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

Найти значение максимального и следующего за ним (предмаксимального) и их позиции в массиве
1. Дан массив из различных значений (значения элементов не повторяются). Найти значение максимального и следующего за ним...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru