2018年5月2日 星期三

InfixToPrefix(using python)

  1. def priorty(oper):  
  2.   return {'+':1,'-':1,'*':2,'/':2}.get(oper,0)  
  3. def toPrefix(infix):  
  4.   stack = [0]*len(infix)  
  5.   output=[]  
  6.   top=0  
  7.   for index in range(len(infix)-1,-1,-1):  
  8.          
  9.       if(infix[index]=='+'or infix[index]=='*'or infix[index]=='-'or infix[index]=='/'):  #priority Comparing
  10.           while(priorty(infix[index])<priorty(stack[top])):  
  11.              output.append(stack[top])  
  12.              top-=1  
  13.           if(top<len(stack)):    
  14.              top+=1  
  15.              stack[top] = infix[index]  
  16.       elif(infix[index] == ')'):  
  17.           if(top<len(stack)):    
  18.              top+=1  
  19.              stack[top] = infix[index]  
  20.       elif(infix[index] == '('):  
  21.           while(stack[top]!=')'):  
  22.              output.append(stack[top])  
  23.              top-=1  
  24.           top-=1# remove the ) operator  
  25.       else:  
  26.           if(top<len(stack)):    
  27.              output.append(infix[index])  
  28.          
  29.                
  30.   output+=[var for var in stack if var!=0 ]  
  31.   output.reverse()  
  32.    
  33.    
  34.   return ''.join(var for var in output)  
  35.   
  36. #output  
  37. infix = "(A+B)*D+E/(F+A*D)+C"  
  38. print(toPrefix(list(infix)))  

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。