#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
struct node {
int data;
struct node *next;
};
typedef struct node NODE;
NODE *top, *tmp;
//legt das nächste Element auf den Stapel.
void push(int number){
if(top == NULL){
//Wenn es das erste Element ist
top = (NODE *) malloc(sizeof(NODE));
top->next = NULL;
top->data = number;
}else{
//Wenn es nicht das erste Element in der Liste ist.
tmp = (NODE *) malloc(sizeof(NODE));
tmp->next = top;
tmp->data = number;
top = tmp;
}
}
//nimmt das letzte Element vom Stapel und gibt den Wert der Nummer zurück.
int pop(){
//Wenn die Liste leer ist, gib einfach eine Null zurück.
if(top == NULL){
return (int) NULL;
}
//Integer der zurückgegeben werden muss.
int out = top->data;
//Wenns das letzte Element ist, kann es einfach gefreet werden.
if(top->next == NULL){
free(top);
top = NULL;
//wenn es nicht das letzte Element ist, muss ich es rausnehmen und danach
//freen und die Speicheradresse wieder übergeben.
}else{
NODE *n = top->next;
free(top);
top = n;
}
return out;
}
int number1 = 0, number2 = 0;
int end = 1;
char eingabe[5];
while(end == 1){
//Lese bis zu einen leerzeichen oder \n, wenn ein character dort steht, trage in in das array
//ein... Ansonsten mache nix.
scanf("%[^ \n]%*c", eingabe);
if(strcmp(eingabe,"-") == 0){
number2 = pop();
number1 = pop();
push(number1-number2);
}else if(strcmp(eingabe,"+") == 0){
number2 = pop();
number1 = pop();
push(number1+number2);
}else if(strcmp(eingabe,"/") == 0){
number2 = pop();
number1 = pop();
push(number1/number2);
}else if(strcmp(eingabe,"%") == 0){
number2 = pop();
number1 = pop();
push(number1%number2);
}else if(strcmp(eingabe,"*") == 0){
number2 = pop();
number1 = pop();
push(number1*number2);
}else if(strcmp(eingabe,"=") == 0){
printf("%d", pop());
end = 0;
}else {
// atoi wandelt char in int um und push fügt ihn auf den stapel hinzu
push(atoi(eingabe));
}
}
return 0;
}
Comments