Writing a push and pop in c

前端 未结 3 797
予麋鹿
予麋鹿 2021-01-26 17:38

Original Q: I\'m trying to create this calculator in C for a project. I got the math functions working, but not I am stuck on how to handle the push an pop. Can somebody help me

3条回答
  •  不要未来只要你来
    2021-01-26 17:43

    //Validation sample code of behavior
    
    #include 
    #include 
    #include 
    #include 
    
    #if 0
     #include "stack.h"
     #include "debug.h"
    #else
     typedef char* stack_item;
    #endif
    
    #define DEFAULT_CAPACITY 16
    
    struct stack {
       size_t capacity;
       size_t size;
       stack_item *data;
    };
    
    typedef struct stack stack;
    
    stack *Stack(void){
        stack *s = malloc(sizeof(stack));
        s->capacity = DEFAULT_CAPACITY;
        s->size = 0;
        s->data = malloc(s->capacity * sizeof(stack_item));
        return s;
    }
    
    int full_stack(stack *this){
        return this->capacity == this->size;
    }
    
    int empty_stack(stack *this){
        return this->size == 0;
    }
    
    void realloc_stack(stack *this){
        this->capacity += DEFAULT_CAPACITY;
        this->data = realloc(this->data, this->capacity*sizeof(stack_item));
    }
    
    void push_stack (stack *this, stack_item item) {
        if (full_stack (this))
            realloc_stack (this);  
        this->data[this->size++]=item;
    }
    
    stack_item pop_stack (stack *this) {
        assert (!empty_stack (this)); 
        if(this->data == NULL){
            fprintf(stderr, "fail");
            exit(1);//Maybe malloc or realloc
        }
        return this->data[--(this->size)];
    }
    
    int main(void){
        stack *s = Stack();
        push_stack(s, "sin");
        push_stack(s, "+");
        push_stack(s, "cos");
        while(!empty_stack(s)){
            puts(pop_stack(s));
        }
        //Stack_(s);//call destructor
        return 0;
    }
    

提交回复
热议问题