Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define max(a, b) ((a > b) ? a : b)
- #define min(a, b) ((a < b) ? a : b)
- struct stack{
- int *data;
- int cap, top;
- };
- //void swapEl (int *i, int *j);
- void initStack (int, struct stack*);
- void push (struct stack*, int);
- void swap (struct stack*);
- int pop (struct stack*);
- int main(int argc, char *argv[]) {
- int n;
- scanf("%i ", &n);
- struct stack st;
- initStack (n, &st);
- for (int i = 0; i < n; i++) {
- char *op = (char*)malloc(sizeof(char) * 6);
- gets(op)
- int x;
- if (!strncmp(op, "CONST", 5)) {
- scanf ("%i", &x);
- push (&st, x);
- } else if (!strncmp(op, "ADD", 3))
- push(&st, pop(&st) + pop(&st));
- else if (!strncmp(op, "SUB", 3))
- push(&st, pop(&st) - pop(&st));
- else if (!strncmp(op, "MUL", 3))
- push(&st, pop(&st) * pop(&st));
- else if (!strncmp(op, "DIV", 3))
- push(&st, pop(&st) / pop(&st));
- else if (!strncmp(op, "MAX", 3))
- push(&st, max(pop(&st), pop(&st)));
- else if (!strncmp(op, "MIN", 3))
- push(&st, min(pop(&st), pop(&st)));
- else if (!strncmp(op, "NEG", 3))
- push(&st, -pop(&st));
- else if (!strncmp(op, "DUP", 3))
- push(&st, st.data[st.top]);
- else if (!strncmp(op, "SWAP", 4))
- swap(&st);
- free(op);
- }
- int fin = pop(&st);
- printf("%i", fin);
- return 0;
- }
- void initStack (int n, struct stack *st){
- st->data = (int*)malloc(sizeof(int) * n);
- st->cap = n;
- st->top = 0;
- }
- int pop (struct stack *arr){
- arr->top--;
- return arr->data[arr->top];
- }
- void push (struct stack *arr, int x){
- arr->data[arr->top] = x;
- arr->top++;
- }
- void swap (struct stack *arr){
- int e1 = pop(arr);
- int e2 = pop(arr);
- push(arr, e1);
- push(arr, e2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement