STACK AND QUEUE POSTFIX AND PREFIX



STACK AND QUEUE POSTFIX AND PREFIX

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

Postingan populer dari blog ini

Class and Object in Python

DOUBLE LINKED LIST

GRAPH