Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- template <typename T>
- class MyStack {
- struct Node {
- T elem;
- Node* next;
- Node(T elem, Node* next = nullptr): elem(elem), next(next){}
- };
- Node* myTop;
- public:
- MyStack():myTop(nullptr){}
- ~MyStack() {
- while (!is_empty()) pop();
- }
- bool is_empty() {
- return myTop == nullptr;
- }
- bool push(T elem) {
- myTop = new Node(elem, myTop);
- return true;
- }
- bool pop() {
- if (!is_empty()) {
- Node* aux = myTop;
- myTop = myTop->next;
- delete aux;
- return true;
- }
- return false;
- }
- T top() { return myTop->elem; }
- };
- #pragma once
- class Stacks {
- float* elems;
- unsigned int numElems;
- unsigned int cap;
- public:
- Stacks(int cap) : cap(cap), numElems(0), elems (new float[cap]){}
- ~Stacks() {
- delete[]elems;
- }
- bool is_empty() {
- return numElems == 0;
- }
- bool is_full() {
- return numElems == cap;
- }
- bool push(float elem) {
- if (!is_full()) {
- elems[numElems++] = elem;
- }
- else {
- return false;
- }
- }
- bool pop() {
- if (!is_empty()) {
- --numElems;
- return true;
- }
- else { return false;
- }
- }
- float top() {
- return elems[numElems - 1];
- }
- };
- #include <iostream>
- #include <string>
- #include <sstream>
- #include "MyStack.h"
- using namespace std;
- int main() {
- string expr, elem;
- MyStack <float> pilin;
- for (;;) {
- cout << "Expresion: "; getline(cin, expr);
- if (expr == "exit") break;
- istringstream iss(expr);
- while (iss >> elem) {
- if ((elem[0] >= '0' && elem[0] <= '9') || (elem[0] == '-' && elem.size() > 1)) {
- float operand = stof(elem);
- cout << "Operando a pila: " << operand << endl;
- pilin.push(operand);
- }
- else {
- float b = pilin.top(); pilin.pop();
- float a = pilin.top(); pilin.pop();
- float result;
- switch (elem[0]) {
- case '-': result = a - b;
- cout << "Resultado: " << result << endl;
- break;
- case '+': result = a + b;
- cout << "Resultado: " << result << endl;
- break;
- case '*': result = a * b;
- cout << "Resultado: " << result << endl;
- break;
- case '/': result = a / b;
- cout << "Resultado: " << result << endl;
- break;
- }
- cout << "Operador: " << elem << endl;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement