#define MAXINPUT 6 /* max numbers as input */ #define ALLOCSIZE 1024 /* # of elements to alloc when needed */ #define EMPTY -1 typedef enum { Nop='N', Add='+', Sub='-', Mul='x', Div='/', End='\0' /* Only for "printf" */ } OPER; typedef struct stackelt { int val; int nop; /* number of operators */ int curop; /* current operator */ char op[MAXINPUT]; /* MAXINPUT-1 + ending \0 */ int next, prev; /* for eval: avoids restructuring stack */ } STACKELT; typedef struct stack { char name[80]; int size; int last; int eval; STACKELT *stack; } STACK; /* tree.c */ extern void gen_tree(int *seq, int n, int nb1, int nb0); /* stack.c */ extern void print_stack(STACK *stack, int details); extern STACK *new_stack(int size, char *name); extern STACKELT *push_stack(STACK *stack, OPER op, int val); extern STACKELT *pop_stack(STACK *stack); extern STACK *dup_stack(STACK *stack, char *name); extern void swap_stack(STACKELT *elts, int i, int j); extern int permute_stack(STACKELT *array, int n); extern void mergesort_stack(STACKELT *array, int left, int right); extern STACKELT *set_op_stack(STACK *stack, int pos, OPER op); extern STACKELT *set_ops_stack(STACK *stack, char *ops); /* oper.c */ extern unsigned ncombinations(int nops, int len); extern char *combination(char *ops, int len, int n); /* eval.c */ extern int eval_cell(STACKELT *pos); extern int eval_stack(STACK *stack);