STACK AND QUEUE POSTFIX AND PREFIX
STACK AND QUEUE
1. STACK
Stack merupakan sebuah kumpulan data atau item dengan cara
penambahan item baru serta penghapusan, selalu terjadi pada tempat atau ujung
yang sama. Stack ini biasa di analogikan seperti tumpukan pada piring. Dimana
kita mengambil maupun meletakkan piring selalu pada sisi atasnya. Walaupun
sebenarnya kita bisa mengambil dan meletakkan piring di sisi bawah. Namun hal
tersebut susah ya dilaksakan? Maka yang umum dan mudah adalah pada sisi
atasnya. Dan ujung tempat data di tambah maupun di hapus, biasa disebut sebagai
TOP. Dan sisi yang satunya, adalah BASE. Dan class Stack ini memiliki konsep
LIFO (last in first out) atau dalam bahasa indonesianya adalah data yang
terakhir masuk, maka ialah yang pertama akan dikeluarkan.
OPERASI PADA STACK
class
stack ini memiliki beberapa operasi yang akan kita buat nantinya, yaitu :
Ø stack()membuat
suatu stack baru yang kosong. Tidak memerlukan parameter dan mengembalikan
suatu stack kosong.
Ø push(item)menambahkan
suatu item baru ke atas (top) dari stack. Perlu item dan tidak mengembalikan
apapun.
Ø pop()menghapus
item teratas dari stack. Tidak perlu parameter dan mengembalikan item. Stack
berubah.
Ø peek()mengembalikan
top item dari stack tetapi tidak menghapusnya. Tidak memerlukan parameter dan
stack tidak berubah.
Ø isEmpty()memeriksa
apakah stack dalam keadaan kosong. Tidak memerlukan parameter dan mengembalikan
nilai boolean.
Ø size() mengembalikan
jumlah item di dalam stack. Tidak memerlukan parameter dan mengembalikan suatu
integer.
SOURCE CODE UNTUK CLASS
STACK
class
Stack:
def
__init__(self):
self.stack
= []
def
isEmpty(self):
return
self.size()==0
def
push(self, val):
return
self.stack.append(val)
def
pop(self):
if
self.isEmpty():
return
None
else:
return
self.stack.pop()
def
peek(self):
if
self.isEmpty():
return
None
else:
return
self.stack[-1]
def
size(self):
return
len(self.stack)
2. QUEUE
Queue (Antrian) adalah kumpulan data yang berurut dimana
penambahan data baru berada di satu ujung bernama ekor atau rear. Sedangkan
penghapusan data berada di ujung kepala atau front. Queue menggunakan metode
pengurutan FIFO (First In, First Out) yaitu data yang masuk pertama maka data
tersebut juga keluar pertama kali. Contoh implementasi dari Queue adalah
Antrian sembako, permainan temukan orang dan lain sebagainya.
Class queue ini memiliki beberapa operasi yang akan kita buat
nantinya, yaitu :
Ø queue() membuat suatu antrian
baru yang kosong. Tidak memerlukan parameter dan mengembalikan suatu antrian
kosong.
Ø enqueue(item) menambahkan suatu item
baru ke ujung saru antrian. Perlu item dan tidak mengembalikan sesuatu.
Ø dequeue() menghapus item depan
dari antrian. Tidak memerlukan parameter dan mengembalikan itemnya. Antrian
termodifikasi.
Ø isEmpty() menguji untuk melihat
apakah antrian dalam keadaan kosong. Tidak memerlukan parameter dan
mengembalian nilai boolean.
Ø size() mengembalikan jumlah item
yang ada di dalam antrian. Tidak memerlukan parameter dan mengembalikan suatu
integer.
Source
code untuk class queue :
class
Queue:
def
__init__(self):
self.queue
= []
def
isEmpty(self):
return
self.size == 0
def
enqueue(self, val):
return
self.queue.insert(0,val)
def
dequeue(self):
if
self.isEmpty():
return
None
else:
return
self.queue.pop()
def
size(self):
return
len(self.queue)
3. Infix to Postfix
Source
Codenya :
class
Stack:
def
__init__(self):
self.items
= []
def
isEmpty(self):
return
self.items == []
def
push(self, item): #push menambahkan
self.items.append(item)
def
pop(self): #pop mengambil dari atas
return
self.items.pop()
def
peek(self): #peek melihat
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
i in tokenList(len(infix)):
if
infix[i]=='(':
infix[i]==')'
if
infix [i]==')':
infix[i]=='('
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)
infixexpr=input("teks=")
print(infixToPostfix(infixexpr))
#print(infixToPostfix("A
* B + C * D"))
#print(infixToPostfix("(
A + B ) * C - ( D - E ) * ( F + G )"))
4. Infix to Prefix
Source
codenya :
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
showList(self):
return
self.items
def
infixToPrefix(infixexpr):
prec
= {}
prec["*"]
= 3
prec["/"]
= 3
prec["+"]
= 2
prec["-"]
= 2
prec["("]
= 1
opStack
= Stack()
prefixList
= []
tokenList
= infixexpr.split()
tokenList.reverse()
for
i in range(len(tokenList)):
if
tokenList[i] == '(':
tokenList[i]=')'
elif
tokenList[i] == ')':
tokenList[i]='('
for
token in tokenList:
if
token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in
"0123456789":
prefixList.append(token)
elif
token == '(':
opStack.push(token)
elif
token == ')':
topToken
= opStack.pop()
while
topToken != '(':
prefixList.append(topToken)
topToken
= opStack.pop()
else:
while
(not opStack.isEmpty()) and \
(prec[opStack.peek()]
>= prec[token]):
prefixList.append(opStack.pop())
opStack.push(token)
while
not opStack.isEmpty():
prefixList.append(opStack.pop())
prefixList
= prefixList[::-1]
return
" ".join(prefixList)
print(infixToPrefix("(
A + B ) * ( C * D )"))
Di post oleh :
1. FITRI ANISA (170411100014)
2. DHEA OKY SYAFITRI (170411100006)
Komentar
Posting Komentar