Stack - push - pop



  • hallo erstmal, ich schreibe gerade ein programm dass beliebig viele punkte aufnimmt (x,y,z) das programm soll die zuletzt eingegebenen zuerst ausgeben, die push funktion hab ich schon geschrieben und die scheint auch zu funktionieren (debugger addressen vergleicht)
    aber ich krieg irgendwie nicht die pop programmiert:

    typedef struct point{
    
        float x_value;
        float y_value;
        float z_value; 
    
        point* next;
        point* previous;
    
    }POINT;
    
    typedef struct stackPoint{
    
        POINT aPoint;
    
        POINT* next;
        POINT* previous;
    
    }STACK_POINT;
    
    typedef STACK_POINT* STACK_POINT_PTR;
    
    STACK_POINT STACK;
    STACK_POINT_PTR pointer = &STACK;
    static int valueOfPoints = 0;
    
    /***********************************Push-Funktion**********************************/
    
    void push(POINT pushPoint){
    
        if(isEmpty() == 0)
            pointer->previous = NULL;
        else
            pushPoint.previous = pointer->next;
    
        pointer->next= (POINT*) malloc(sizeof(POINT));
    
        pushPoint.next = pointer->next;
    
        valueOfPoints++;
    }
    
    /***********************************Pop-Funktion**********************************/
    
    POINT pop(){
    
        int exit = 0;
        POINT tmp;
    
        while(!exit){
            if(isEmpty() == 0){
                exit = 1;
                continue;
            }
    
            free(pointer->next);
    
            exit = 1;
        }
        valueOfPoints--;
    
        return tmp;
    }
    
    int isEmpty(){
        return valueOfPoints;
    }
    

    könnte mir jemand einen vorschlag geben ? bzw. die lösung ?



  • sorry dass ich noch keine kommentare geschrieben hab 😞



  • Erstmal hast du in der pop()-Funktion vermutlich ein tmp=pointer->aPoint; (oder so - bei deinem Stack-Aufbau müsstest du besser durchblicken) vergessen. Und zweitens: Wozu soll die while-Schleife gut sein? Da sowieso am Ende des ersten Schleifendurchlaufs exit==1 gilt, reicht ein einfaches if-else aus.


Anmelden zum Antworten