STRUKTUR DATA - INFIX, PREFIX, POSTFIX EXPRESSIONS Python

STRUKTUR DATA - Infix, Prefix dan Postfix Expressions



Maka Operasi calculnyafore level dari presedensi tersebut.
A + B * C + D = ((A + (B * C)) + D) → operator * lebih didahulukan dari operator *, dan operator + yang pertama juga didahulukan fungsi yang kedua (kiri ke kanan).
Jadi pronsip Tingkat precedence adalah : Presedensi Tertinggi dan Kiri ke Kanan.
 
  

 
  
 





  • PostFixEvaluation
 

def stack():
    s=[]
    return (s)

def push(s,data):
    s.append(data)

def pop(s):
    data=s.pop()
    return (data)

def peek(s):
    return(s[len(s)-1])

def isEmpty(s):
    return(s==[])

def size (s):
    return(len(s))

def isOperand(x):
    return (ord(x)>=ord('a')and ord(x)<=ord('z'))or(ord(x)>=ord('A')and ord(x)<=ord('Z'))


def Infix(x):
    s=stack()
    for i in range(len(x)):
        if isOperand(x[i]):
            temp=x[i]
            push(s,temp)
        else:
            temp1=pop(s)
            temp2=pop(s)
            hasil=("("+temp2+x[i]+temp1+")")
            push(s,hasil)
    return peek(s)

print("Hasil = ",Infix("ABC+*"))

           



  • Infix to Prefix
Untuk mengkonversi infiks ke ekspresi postfix merujuk ke artikel ini Stack | Set 2 (Infiks ke Postfix).
Kami menggunakan hal yang sama untuk mengubah Infix to Prefix.

       Langkah 1: Membalikkan ekspresi infiks yaitu A + B * C akan menjadi C * B + A. Catatan saat membalik masing-masing '(' akan menjadi ')' dan masing-masing ')' menjadi '('.
       Langkah 2: Dapatkan ekspresi postfix dari ekspresi yang dimodifikasi yaitu CB * A +.
       Langkah 3: Membalikkan ekspresi postfix. Maka dalam contoh kita awalan adalah + A * BC.

 


class Stack:
     def __init__(self):
         self.items = []
     def isEmpty(self):
         return self.items == []
     def push(self, item):
         self.items.append(item)
     def pop(self):
         return self.items.pop()
     def peek(self):
         return self.items[len(self.items)-1]
     def size(self):
         return len(self.items)
def infixToPostfix(infixexpr):
    prec = {}
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    opStack = Stack()
    postfixList = []
    tokenList = infixexpr
    for token in tokenList:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and \
               (prec[opStack.peek()] >= prec[token]):
                  postfixList.append(opStack.pop())
            opStack.push(token)
    while not opStack.isEmpty():
        postfixList.append(opStack.pop())
    return " ".join(postfixList)
infix = "A * ( B + C ) * D"
infix=infix[::-1]
infix=infix.split()
for i in range(len(infix)):
         if infix[i] == '(':
              infix[i]=')'
         elif infix[i] == ')':
              infix[i]='('
print(infix)
prefix=infixToPostfix(infix)
prefix=prefix[::-1] 
print(prefix)


 

Komentar

Postingan populer dari blog ini

STRUKTUR DATA - Hashing Python