Infix, Prefix dan Postfix pada Python
A. Definisi
Infix
adalah cara penulisan atau ungkapan yang meletakan operator di tengah
antara 2 operand dalam hal ini dalam kurung sangat menentukan posisi.
Contoh Infix :
A + B
( A - B ) * C
Prefix
adalah cara penulisan atau ungkapan yang meletakan operator disebelah
kiri 2 operand dan dalam kurung sangat menentukan posisi.
Contoh Prefix :
+ A B
* - A B C
Posfix
adalah cara penulisan yang meletakan operator disebelah kanan 2 operand
dan posisi operand yang berada di dalam kurung sangat menentukan.
Contoh Postfix :
A B +
A B - C *
B. Ilustrasi
C. Algoritma
Berikut ini algoritma dari konversi Infix ke Postfix:
- Buat presisi atau kekuatan operator ( Penjumlahan dan Pengurangan bernilai 2 , Perkalian dan Pembagian bernilai 3 , Kurang buka dan tutup bernilai 1 )
- Input data dalam bentuk infix
- Pisahkan data infix menggunakan split menjadi bentuk List
- Periksa semua data yang berada di dalam list secara urut mulai dari awal hingga akhir
- Jika bertemu operand, maka masukan data ke PostfixList untuk dicetak
- Jika bertemu kurung buka '(' maka masukan ke Stack Operator
- Jika bertemu kurung tutup ')' maka Stack Operator yang paling atas dan bukan kurung buka '(' diambil untuk dicetak ke PostfixList
- Jika bertemu operator maka jika Stack Operator tidak kosong dan kekuatan operator yang digunakan lebih kecil dari kekuatan operator yang berada di top Stack Operator maka operator yang berada di Stack Operator diambil (pop) untuk dicetak di PostfixList. lalu masukan operator yang digunakan ke dalam Stack Operator.
- Begitu seterusnya sampai List yang berisi data Infix habis.
- Jika Stack Operator masih ada isinya maka ambil dan tambahkan ke PostfixList untuk dicetak.
- Cetak PostfixList
Berikut ini Algoritma dari konversi Infix ke Prefix:
- Balikan data Infix
- Jika operator kurung buka '(' maka ganti dengan kurung tutup ')' begitu sebaliknya
- Masukan data tersebut ke konversi Infix ke Postfix
- Setelah keluar hasil, Balikan lagi hasil tersebut
- Maka keluar bentuk Prefix
D. Kode Program
- class Stack:
- def __init__(self):
- self.items = []
- def isEmpty(self):
- return self.items == []
- def push(self, items):
- self.items.append(items)
- def pop(self):
- return self.items.pop()
- def peek(self):
- return self.items[len(self.items)-1]
- def infixToPostfix(infixexpr):
- prec = {}
- prec["*"] = 3
- prec["/"] = 3
- prec["+"] = 2
- prec["-"] = 2
- prec["("] = 1
- opStack = Stack()
- postfixList = []
- tokenList = infixexpr.split()
- 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)
- print(infixToPostfix("A * B + C * D"))
Kode Program konversi Infix ke Prefix :
def size(self):
Komentar
Posting Komentar