struct EE_STACK_NODE { double datum; struct EE_STACK_NODE* tail; }; typedef struct EE_STACK_NODE NODE; typedef struct EE_STACK_NODE* STACK; STACK push(double datum, STACK tail){ /* Given a double value (datum), and a STACK (tail), * push(datum,tail) is the STACK resulting from * prepending datum to the STACK tail. */ NODE* new_node = (NODE*)malloc(sizeof(NODE)); (*new_node).datum = datum; (*new_node).tail = tail; return new_node; } STACK pop(STACK target_stack){ /* Given a STACK (target_stack), pop(target_stack) * is the STACK resulting from the removal of the first * item in target_stack; */ if (target_stack == NULL){ return target_stack; } STACK tail = (*target_stack).tail; free(target_stack); return tail; } double peek(STACK target_stack){ /* Given a STACK (target_stack), peek(STACK) * is the first element's datum. */ if (target_stack == NULL){ return 0; } return (*target_stack).datum; }