zara7 Ответов: 2

Для реализации стековой структуры данных в C++. Это может быть достигнуто с помощью стандартной библиотеки шаблонов C++ (STL) или с помощью пользовательского класса.


У меня нет выхода, и мне также не хватает существенной логики.

Что я уже пробовал:

// Required headers
//  main.cpp
// Program Purpose: Implementing a stack structure in C++.
#include <iostream>
#include <string.h>
#include <bits/stdc++.h>

using namespace std;

int main() {

    // Create a stack of capacity equal to expression size
    stack <float> s;

    cout << "Please enter an expression in Post-fix notation" << endl;
    string exp;

    float val1, val2;

    // set status = false when division by zero
    bool status = true;

    // read each operand / operator
    while (cin >> exp) {

        // If the character is a number, push to stack
        try {
            s.push(stof(exp));

            // operator ==> pop values from stack and do operation
        } catch(...) {

            if (!s.empty()) {
                val1 = s.top();
                s.pop();
            }

            if (!s.empty()) {
                val2 = s.top();
                s.pop();
            } else {
                // stack is empty
                status = false;
            }

            // do only if status == true
            if (status) {
                // arithmetic operation
                if (exp == "+") {
                    s.push(val2 + val1);
                } else if(exp == "-") {
                    s.push(val2 - val1);
                } else if(exp == "*") {
                    s.push(val2 * val1);
                } else if(exp == "/") {
                    if (val1 == 0) {
                        status = false;
                    } else {
                        s.push(val2 / val1);
                    }
                }
            }
        }
    }

    if (status) {
        // final answer is the element present on the stack
        cout<<"Result: "<< s.top();
    } else {
        cout << "error: division by zero" << endl;
    }

    return 0;
}

Shao Voon Wong

Для цели вашей тренировки, вы можете использовать std::vector для реализации вашего стека. СТД::вектор-это динамический массив, который может расширяться и сжиматься. STL уже имеет реализацию стека, которую вы можете использовать.

2 Ответов

Рейтинг:
4

CPallini

В том числе и stack заголовок ваш код работает. Для того чтобы увидеть результат вы должны отправить последовательность EOF (CTRL+D на Linux, CTRL+Z на Windows).


Рейтинг:
13

Rick York

В чем заключается ваш вопрос?

Если вы можете использовать контейнер STL, то посмотрите это : <stack> - Ссылка на C++ [^]