Napisz algorytm prezentujący możliwości użycia stosu do innego zadania niż sam stos

Odpowiedź :

Odpowiedź:

#include <iostream>

#include <stack>

#include <algorithm>

#include <array>

bool canAddToStack(const char a) {

   static std::array<char, 6> toStack = {'+', '-', '*', '/', '(', ')'};

   return std::find(toStack.begin(), toStack.end(), a) != std::end(toStack);

}

bool canBeMovedFromStackToResult(const char a) {

   static std::array<char, 4> fromStack = {'+', '-', '*', '/'};

   return std::find(fromStack.begin(), fromStack.end(), a) != std::end(fromStack);

}

void dropFromStack(std::stack<char> &stack, std::string &res) {

   while (stack.top() != '(') {

       if (canBeMovedFromStackToResult(stack.top())) {

           res += stack.top();

       }

       stack.pop();

   }

   stack.pop();

}

int main() {

   std::string s;

   std::cout << "Podaj wyrazenie: " << std::endl;

   std::cin >> s;

   std::stack<char> stacked;

   std::string res;

   for (const char &ch : s) {

       if (canAddToStack(ch)) {

           stacked.push(ch);

       }

       if (std::isdigit(ch)) {

           res += ch;

       }

       if (stacked.top() == ')') {

           dropFromStack(stacked, res);

       }

   }

   std::cout << res << std::endl;

   return 0;

}

Wyjaśnienie:

Ja kiedyś np. zrobiłem podstawową wersję do przeliczenia wyrażenia na ONP(Odwrotną Notację Polską) w wykorzystaniem stosu