C++/Data Structure/Stack
A four-function postfix calculator.
<source lang="cpp">
- include <iostream>
- include <stack>
- include <string>
- include <cmath>
using namespace std; int main() {
stack<double> stackObject; double a, b; string s; do { cout << ": "; cin >> s; switch( s[ 0 ]) { case "q": // quit the calculator break; case ".": // show top-of-stack cout << stackObject.top() << endl; break; case "+": // add if(stackObject.size() < 2) { cout << "Operand Missing\n"; break; } a = stackObject.top(); stackObject.pop(); b = stackObject.top(); stackObject.pop(); cout << a + b << endl; stackObject.push(a + b); break; case "-": // subtract // see if user entering a negative number if(s.size() != 1) { // push value onto the stack stackObject.push(atof(s.c_str())); break; } // otherwise, is a subtraction if(stackObject.size() < 2) { cout << "Operand Missing\n"; break; } a = stackObject.top(); stackObject.pop(); b = stackObject.top(); stackObject.pop(); cout << b - a << endl; stackObject.push(b - a); break; case "*": // multiply if(stackObject.size() < 2) { cout << "Operand Missing\n"; break; } a = stackObject.top(); stackObject.pop(); b = stackObject.top(); stackObject.pop(); cout << a*b << endl; stackObject.push(a*b); break; case "/": // divide if(stackObject.size() < 2) { cout << "Operand Missing\n"; break; } a = stackObject.top(); stackObject.pop(); b = stackObject.top(); stackObject.pop(); cout << b/a << endl; stackObject.push(b/a); break; default: // push value onto the stack stackObject.push(atof(s.c_str())); break; } } while(s != "q"); return 0;
}
</source>
A simple stack example: push, empty, pop and top
<source lang="cpp">
- include <iostream>
- include <stack>
using namespace std; int main() {
stack<char> stackObject; stackObject.push("A"); stackObject.push("B"); stackObject.push("C"); stackObject.push("D"); while(!stackObject.empty()) { cout << "Popping: "; cout << stackObject.top() << endl; stackObject.pop(); } return 0;
}
</source>