# Leetcode 150. Evaluate Reverse Polish Notation in C language 開始決心用c刷leetcode,所有資結都要自己尻出來 這題是stack的實作加上postfix的計算 感覺stack可以寫得更漂亮 ```c= int Top(long long int* stack,int* top){ if(*top==-1) return -201;//it's empty return stack[*top]; } void Push(long long int* stack,int* top,int stackSize,long long int num){ if(*top==stackSize)//stack is fulled return; *top+=1; stack[*top]=num; } void Pop(int* top){ if(*top==-1)//it's empty return; *top-=1; } long long int evalRPN(char ** tokens, int tokensSize){ long long int Ans; //init a stack long long int* stack=(long long int*)malloc(sizeof(long long int)*tokensSize); int* top=(int*)malloc(sizeof(int)); *top=-1; long long int i,j,num,a,b; bool neg; for(i=0;i<tokensSize;i++){ neg=false; switch(tokens[i][0]){ case '+': a=Top(stack,top); Pop(top); b=Top(stack,top); Pop(top); Push(stack,top,tokensSize,a+b); break; case '-': num=0; for(j=0;tokens[i][j]!='\0';j++) if(j>0){ //it's a negative number neg=true; num=num*10+(tokens[i][j]-'0'); } num=-num; if(neg) Push(stack,top,tokensSize,num); else{ a=Top(stack,top); Pop(top); b=Top(stack,top); Pop(top); Push(stack,top,tokensSize,b-a); } break; case '*': a=Top(stack,top); Pop(top); b=Top(stack,top); Pop(top); Push(stack,top,tokensSize,a*b); break; case '/': a=Top(stack,top); Pop(top); b=Top(stack,top); Pop(top); Push(stack,top,tokensSize,b/a); break; default: //it's a positive number num=0; for(j=0;tokens[i][j]!='\0';j++){ num=num*10+(tokens[i][j]-'0'); } Push(stack,top,tokensSize,num); } } Ans=Top(stack,top); free(stack); free(top); return Ans; } ```