Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. #pragma once
  2. template <typename T>
  3. class MyStack {
  4. struct Node {
  5. T elem;
  6. Node* next;
  7.  
  8. Node(T elem, Node* next = nullptr): elem(elem), next(next){}
  9. };
  10.  
  11. Node* myTop;
  12.  
  13. public:
  14. MyStack():myTop(nullptr){}
  15. ~MyStack() {
  16. while (!is_empty()) pop();
  17. }
  18.  
  19. bool is_empty() {
  20. return myTop == nullptr;
  21. }
  22.  
  23. bool push(T elem) {
  24. myTop = new Node(elem, myTop);
  25. return true;
  26. }
  27.  
  28. bool pop() {
  29. if (!is_empty()) {
  30. Node* aux = myTop;
  31. myTop = myTop->next;
  32. delete aux;
  33. return true;
  34. }
  35. return false;
  36. }
  37.  
  38. T top() { return myTop->elem; }
  39.  
  40. };
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47. #pragma once
  48.  
  49. class Stacks {
  50. float* elems;
  51. unsigned int numElems;
  52. unsigned int cap;
  53.  
  54. public:
  55. Stacks(int cap) : cap(cap), numElems(0), elems (new float[cap]){}
  56. ~Stacks() {
  57. delete[]elems;
  58. }
  59.  
  60. bool is_empty() {
  61. return numElems == 0;
  62. }
  63.  
  64. bool is_full() {
  65. return numElems == cap;
  66. }
  67.  
  68. bool push(float elem) {
  69. if (!is_full()) {
  70. elems[numElems++] = elem;
  71. }
  72. else {
  73. return false;
  74. }
  75. }
  76.  
  77. bool pop() {
  78. if (!is_empty()) {
  79. --numElems;
  80. return true;
  81. }
  82. else { return false;
  83. }
  84. }
  85.  
  86. float top() {
  87. return elems[numElems - 1];
  88. }
  89.  
  90. };
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97. #include <iostream>
  98. #include <string>
  99. #include <sstream>
  100. #include "MyStack.h"
  101. using namespace std;
  102.  
  103. int main() {
  104. string expr, elem;
  105. MyStack <float> pilin;
  106.  
  107. for (;;) {
  108. cout << "Expresion: "; getline(cin, expr);
  109. if (expr == "exit") break;
  110.  
  111. istringstream iss(expr);
  112. while (iss >> elem) {
  113. if ((elem[0] >= '0' && elem[0] <= '9') || (elem[0] == '-' && elem.size() > 1)) {
  114. float operand = stof(elem);
  115. cout << "Operando a pila: " << operand << endl;
  116. pilin.push(operand);
  117. }
  118. else {
  119. float b = pilin.top(); pilin.pop();
  120. float a = pilin.top(); pilin.pop();
  121. float result;
  122. switch (elem[0]) {
  123. case '-': result = a - b;
  124. cout << "Resultado: " << result << endl;
  125. break;
  126. case '+': result = a + b;
  127. cout << "Resultado: " << result << endl;
  128. break;
  129. case '*': result = a * b;
  130. cout << "Resultado: " << result << endl;
  131. break;
  132. case '/': result = a / b;
  133. cout << "Resultado: " << result << endl;
  134. break;
  135. }
  136. cout << "Operador: " << elem << endl;
  137. }
  138. }
  139. }
  140.  
  141.  
  142.  
  143.  
  144. return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement