#include #include #include 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; }