Rodex_ icon

Postfix

Rodex_ | PRO | 02/26/17 12:31:54 PM UTC | 0 ⭐ | 254 👁️ | Never ⏰ | []
C |

2.66 KB

|

None

|

0 👍

/

0 👎

#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