Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- typedef struct stack
- {
- int* elements;
- int top;
- int maxsize;
- }stack;
- void push(stack* s, int n)
- {
- s -> top++;
- s -> elements[s->top] = n;
- }
- int pop(stack* s)
- {
- s->top--;
- return s->elements[s->top+1];
- }
- bool empty(stack*s)
- {
- if(s->top==-1) return true;
- else return false;
- }
- stack* new_stack(int size)
- {
- stack* stos=(int*)malloc(sizeof(int*)+2*sizeof(int));
- stos->maxsize=size;
- stos->top=-1;
- stos->elements=malloc(size*sizeof(int));
- return stos;
- }
- void delstack(stack* s)
- {
- free(s->elements);
- free(s);
- }
- void plus(stack* s)
- {
- int a = pop(s);
- int b = pop(s);
- push(s, b+a);
- }
- void minus(stack *s)
- {
- int a = pop(s);
- int b = pop(s);
- push(s, b-a);
- }
- void mult(stack *s)
- {
- int a = pop(s);
- int b = pop(s);
- push(s, b*a);
- }
- void divide(stack *s)
- {
- int a = pop(s);
- int b = pop(s);
- push(s, b/a);
- }
- int readnum(char *input, int numsize)
- {
- int t=0;
- int result=0;
- int multiplier=1;
- for(t=0; t<numsize && input[t]!='\0'; t++)
- {
- multiplier*=10;
- }
- multiplier/=10;
- for(t=0; t<numsize && input[t]!='\0'; t++)
- {
- result+=(input[t]-48)*multiplier;
- multiplier/=10;
- }
- return result;
- }
- typedef enum input_types {num, plu, min, multi, divid} input_types;
- input_types check(char* ch)
- {
- if (ch[0] == '-') return min;
- else if (ch[0] == '+') return plu;
- else if (ch[0] == '/') return divid;
- else if (ch[0] == '*') return multi;
- else return num;
- }
- int dowork(int n, int k)
- {
- stack* ops=new_stack(n);
- char* input=malloc((k+1)*sizeof(char));
- while(n>0 || ops->top>0)
- {
- for(int i=0; i<n; i++) input[i]="\0";
- scanf("%s", input);
- if(check(input)==plu) plus(ops);
- else if(check(input)==min) minus(ops);
- else if(check(input)==multi) mult(ops);
- else if(check(input)==divid) divide(ops);
- else
- {
- push(ops, readnum(input,k));
- n--;
- }
- }
- int result = pop(ops);
- delstack(ops);
- free(input);
- return result;
- }
- int main()
- {
- int n,k;
- scanf("%d",&n);
- scanf("%d",&k);
- int res = dowork(n,k);
- printf("%d\n", res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement