===Headfile===
//
// Created by Alexander Dietrich on 09.03.2017.
//
#ifndef POSTFIX_STACK_H
#define POSTFIX_STACK_H
#include <iostream>
class Node{
public:
Node* getNext(){
return next;
}
int getValue(){
return value;
}
void setNext(Node* nextNext){
next = nextNext;
}
void setValue(int number){
value = number;
}
private:
Node *next;
int value;
};
class Stack{
public:
Stack(); //constructor
~Stack(); //destructor
void push(int value);
int pop();
private:
Node *first;
};
#endif //POSTFIX_STACK_H
======stack.cpp======
//
// Created by Alexander Dietrich on 09.03.2017.
//
#include "stack.h"
Stack::Stack() {
// stack wird auf auf null gesetzt
first = nullptr;
}
Stack::~Stack() {
// destructor -> stack wird wieder gelöscht (allocated mem freigegeben)
Node* current = first;
while(current != nullptr){
Node* tempNext = current->getNext();
delete current;
current = tempNext;
}
}
void Stack::push(int value) {
// nächste Eingabe wird auf den Stack gelagert
if(first == nullptr){
first = new Node();
first->setValue(value);
first->setNext(nullptr);
}else{
Node *tmp = new Node();
tmp->setNext(first);
tmp->setValue(value);
first = tmp;
}
}
int Stack::pop() {
// die zuletzt eingegebene Zahl wir zurückgegeben vom Stack
int toReturn = first->getValue();
Node *next = first->getNext();
delete first;
first = next;
return toReturn;
}
==============main.c==============
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include "stack.h"
using namespace std;
int main() {
int number1 = 0, number2 = 0, end = 1;
Stack* liste = new Stack();
while(end == 1) {
std::string eingabe = "";
std::cin >> eingabe;
if (eingabe.compare("-") == 0) {
number2 = liste->pop();
number1 = liste->pop();
liste->push(number1 - number2);
} else if (eingabe.compare("+") == 0) {
number2 = liste->pop();
number1 = liste->pop();
liste->push(number1 + number2);
} else if (eingabe.compare("/") == 0) {
number2 = liste->pop();
number1 = liste->pop();
liste->push(number1 / number2);
} else if (eingabe.compare("%") == 0) {
number2 = liste->pop();
number1 = liste->pop();
liste->push(number1 % number2);
} else if (eingabe.compare("*") == 0) {
number2 = liste->pop();
number1 = liste->pop();
liste->push(number1 * number2);
} else if (eingabe.compare("=") == 0) {
number1 = liste->pop();
cout << number1 << endl;
end = 0;
} else {
std::stringstream s(eingabe);
s >> number1;
liste->push(number1);
}
}
delete liste;
return 0;
}
Comments