Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925

Класс стек

12.08.2013, 22:55. Показов 7686. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени!

Читаю книгу Р. Лафоре - Объектно-ориентированное программирование С++.

В теме: "Массивы как члены классов" приведен такой пример:

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
// stakaray.cpp
// класс стек
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class Stack
{
  private:
    enum { MAX = 10 }; // немного нестандартный синтаксис
    int st [ MAX ];    // стек в виде массива
    int top;           // вершина стека
  public:
    Stack ( ) // конструктор
      { top = 0; }
    void push ( int var ) // поместить в стек
      { st [ ++top ] = var; }
    int pop ( ) // взять из стека
      { return st [ top-- ]; }
};
///////////////////////////////////////////////////////////
int main ( )
{
  Stack s1;
 
  s1.push ( 11 );
  s1.push ( 22 );
  cout << "1: " << s1.pop ( ) << endl;
  cout << "2: " << s1.pop ( ) << endl;
  s1.push ( 33 );
  s1.push ( 44 );
  s1.push ( 55 );
  s1.push ( 66 );
  cout << "3: " << s1.pop ( ) << endl;
  cout << "4: " << s1.pop ( ) << endl;
  cout << "5: " << s1.pop ( ) << endl;
  cout << "6: " << s1.pop ( ) << endl;
  return 0;
}
Как это работает - вопросов не вызывает. Вопрос - для чего вообще может понадобиться подобный класс? В каких случаях может быть использован данный "приём"?

Заранее спасибо! =)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2013, 22:55
Ответы с готовыми решениями:

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
&quot;Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

Класс Стек Stack. не работает класс исключений
Здравствуйте! Решил проверить код на пригодность, но почему то класс исключений выскакивает на ошибке. Я никак не могу понять такие вещи...

Шаблонный класс Стек
прошу помочь разобраться с кодом. вопросы выделил по ходу кода. #ifndef _STACKNODE_H_ #define _STACKNODE_H_ #include...

14
41 / 37 / 8
Регистрация: 24.07.2013
Сообщений: 219
12.08.2013, 23:21
Яб сказал так ! Это скорее пример и служит он по большей части для того чтобы тот кто в нем разобрался стал лудши понимать принцип работы стека и при необходимости в будущем мог написать свой стек естественно более сложный и всеобьемлющий
1
 Аватар для Olivеr
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
13.08.2013, 01:28
Цитата Сообщение от reisal78 Посмотреть сообщение
Вопрос - для чего вообще может понадобиться подобный класс?
например, для проверки баланса скобок в арифметическом выражении
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
#include <iostream>
#include <stack>
#include <string>
 
bool check_brackets(const std::string &expr)
{
    std::stack<char> brackets;
 
    for (auto c : expr)
        if ( c == '(' || c == '{' || c == '[' )
            brackets.push(c);
        else
            switch ( c ) {
                case ')':
                    if (!brackets.empty() && brackets.top() == '(')
                        brackets.pop();
                    else return false;
                    break;
                case '}':
                    if (!brackets.empty() && brackets.top() == '{')
                        brackets.pop();
                    else return false;
                    break;
                case ']':
                    if (!brackets.empty() && brackets.top() == '[')
                        brackets.pop();
                    else return false;
                    break;
            }
    return brackets.empty();
}
 
int main()
{
    std::string expr;
    std::getline(std::cin,expr);
    if (check_brackets(expr)) std::cout << "ok";
    else std::cout << "no ok";
    return 0;
}
2
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
13.08.2013, 10:13
Лучший ответ Сообщение было отмечено как решение

Решение

Olivеr, дополню с вашего позволения.
Для вычисления арифметических выражений- обратная польская запись( ОПЗ). Если надо, могу привести код.

Добавлено через 53 секунды
Подсчёт производных. Вообщем для вычисления любого вырожения сложнее a+b)
3
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
13.08.2013, 10:40  [ТС]
Спасибо! Понял.
0
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
13.08.2013, 17:35
Стек весьма полезная структура данных,может использоваться для симуляции рекурсии.
Конечно,подобная,реализация абсолютно бесполезная,обычно стек строится на связном списке
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
13.08.2013, 18:00
Почему бесполезная? Можно использовать "связный список массивов", что даст и скорость и емкость.
0
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
14.08.2013, 14:35
"Связный список массивов" это вы где такую структуру вычитали?
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.08.2013, 14:47
fatalis, это кто вам рассказал, что эмуляция рекурсии бесполезна? Ткните мне пальцем...
Скорее всего zer0mail имеел ввиду, в виде массива, обычного.
0
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
14.08.2013, 16:54
Где я,например,написал,что эмуляция рекурсии бесполезная?
Читать надо внимательней.
0
 Аватар для UriahHeep
224 / 219 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
14.08.2013, 17:30
Цитата Сообщение от reisal78 Посмотреть сообщение
C++
st [ ++top ] = var;
Так вы пропускаете нулевой элемент массива и помещая MAX-ый элемент в стек вы выходите за пределы выделенной памяти.
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
14.08.2013, 17:36
Цитата Сообщение от fatalis Посмотреть сообщение
"Связный список массивов" это вы где такую структуру вычитали?
А что, можно использовать только структуры, которые прочитал? Вот связный список массивов:
C
1
2
3
4
struct LM {
    LM *next;
    int *m;
};
на базе которого нетрудно сделать экономичный быстрый стек.
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
14.08.2013, 17:41
стек - полезная структура при решении задач. только в данном случае, как раз гораздо удобнее стек на массиве. в графовых задачах часто нужен. есть люди, которые могут с помощью него очень много решать задач.
0
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
14.08.2013, 23:25
Цитата Сообщение от zer0mail Посмотреть сообщение
А что, можно использовать только структуры, которые прочитал? Вот связный список массивов:
C
1
2
3
4
struct LM {
    LM *next;
    int *m;
};
на базе которого нетрудно сделать экономичный быстрый стек.
Экономичный быстрый стек делается простым связным списком
C++
1
2
3
4
5
template<class T> struct node
{
 T elem;
 Node *next;
}
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
15.08.2013, 07:57
Чего это он быстрый-то? При миллионах вставок/удалений в секунду надо постоянно выделять - освобождать память. Так что массив легко выигрывает у списка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.08.2013, 07:57
Помогаю со студенческими работами здесь

Определить класс стек
Определить класс стек. В класс включить два конструктора для определе-ния стека по его размеру и путем копирования другого стека. ...

Класс, реализующий стек
Помогите девушке, только учусь программировать и чет пока не очень=( плиииииииииииииииииииииииииз кого не затруднит...... Задание 5....

Стек через класс
Не всекаю где проблема, после создания new_el, значения стека p по переменной fam меняются. Задача такова: создать отсортированный список...

Разработать класс «Стек»
Задание 1. Разработать класс для работы с динамической структурой «Стек», содержащей целочисленные значения. Реализовать: ...

Класс стек, рекурсия,
задача - реализовать стек через класс, все основные функции со стеком, и самое главное, рекурсивную функцию, которая выводит стек в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru