penjelasan Stack dan Queue dalam python



Mvapdg – assalmualaikum wr. wb.

Jumpa lagi ini teman – teman... pada kesempatan kali ini saya akan mencoba untuk menjelaskan beberapa pengimplentasian atau pembuatan class python. Yaitu stack. Sudah taukah apa itu stack dan queue ? jika belum tau, jangan khawatir karena, saya akan mencoba untuk menjelaskannya kepada kalian semua... sebenarnya, saya mendapatkan materi ini saat saya semester 2 lalu.. jadi tidak ada salahnya jika saya pilih untuk saya jadikan materi postingan... 

Nah untuk kelancaran pembelajaran ini, alangkah lebih baiknya jika kalian menginstall python versi 3.4 terlebih dahulu... untuk tutorialnya, kalian bisa baca tutorialnya DISINI ya teman – teman...  Atau bisa baca di Cara install python versi 3.4 dengan mudah. Nah setelah kalian menginstall python versi 3.4 nya, kalian juga bisa belajar dasar – dasar python DISINI. penjelasan mengenai list, tuple, string, dictionary dan lain sebagainya.

Nah setelah itu, kalian bisa mengembangkannya dengan menggunakan stack.. yuk langsung saja kita mulai..

Pembuatan dan penjelasan Stack.

Sebelum kita membuat class dari stack, alangkah lebih baiknya jika kita mengetahui apa itu 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. 

Nah, class stack ini memiliki beberapa operasi yang akan kita buat nantinya.. untuk mengetahui apa saja oprasinya, silahkan cek di bawah ini ya...

  • 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. 


Nah itu dia operasi – operasi yang ada di dalam Stack.. nah selanjutnya saya akan memberikan penggambaran secara umum dalam tabel bagaimana kerja dari  Stack ini.. seperti yang sudah saya katakan diatas, Operasi push akan menambahkan item baru ke ujung list, operasi pop akan menghapus pada ujung yang sama tersebut.

Anggap saja kita telah membuat Stack dengan nama S.. maka kerjanya akan seperti berikut ini...

Operasi stack
Isi stack
Nilai kembalian
S.isEmpty()
[]
True
S.push(4)
[4]

S.push(‘dog’)
[4,’dog’]

S.pekk()
[4,’dog’]
‘dog’
S.push(True)
[4,’dog’,True]

S.size()
[4,’dog’,True]
3
S.isEmpty()
[4,’dog’,True]
False
S.push(8.5)
[4,’dog’,True,8.5]

S.pop()
[4,’dog’,True]
8.5
S.pop()
[4,’dog’]
True
S.size()
[4,’dog’]
2

Nah setelah kita tahu algoritma dari penggunaan stack ini, dan selanjutnya adalah kita akan membuat class dari Stack ini... yuk langsung saja.. ini dia..


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)


nah itu dia Code dari class Stack... nah setelah itu, taukah apa saja pemanfaatan dari class stack ini? sebenarnya, penggunaan stack ini cukup banyak.. nah berikut ini saya akan memberikan beberapa contoh penggunaan dari class stack. Yang mungkin akan membuat pikiran kalian terbuka dan tau apa fungsi dari class stack ini...

Contoh penggunaan Stack yang akan saya berikan adalah contoh pengecekan keseimbangan dari tanda kurung... dimana kita tau, kurung yang digunakan dalam penulisan itu haruslah seimbang.. dimana ada kurung buka ‘(‘ maka harus ditutup dengan kurung tutup ‘)’. Jika keduanya tidak seimbang, maka akan terjadi kesalahan.. nah nantinya saya akan membagikan code pemanfaatan Stack yang insyaallah seperti itu jalannya... nah langsung saja ya.. berikut saya sertakan programnya..


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 parChecker(symbolString):
     s = Stack()
     balanced = True
     index = 0
    while index < len(symbolString) and balanced:
         symbol = symbolString[index]
         if symbol == "(":
             s.push(symbol)
         elif symbol == “)” :
             if s.isEmpty():
                 balanced = False
             else:
                 s.pop() 
        index = index + 1 
    if balanced and s.isEmpty():
         return True
     else:
         return False 
print(parChecker('((()))'))
print(parChecker('(()'))


nah selanjutnya saya akan mencoba menjelaskan mengenai isi dari code diatas... yuk langsung saja ya...
     s = Stack()
     balanced = True
     index = 0

code di atas ini merupakan sebuah pendeklarasian variabel.. dimana kita tahu, ‘s’ merupakan class stack yang akan kita gunakan sebagai alat pengecekan nantinya...
while index < len(symbolString) and balanced:
nah kemudian, code diatas merupakan sebuah perulangan yang akan mengecek apakah teks dan simbol (symbolstring) yang di masukkan itu kosong atau tidak serta akan mengecek nilai dari ‘balanced’ apakah ‘true’ atau ‘false’. Jika teks dan simbol (symbolstring) kosong, maka perulangan ini tidak akan berfungsi..  kemudian, jika isi dari ‘balanced’ ini ‘false’ maka perulangan juga tidak akan berjalan... jadi untuk menjalankannya, teks dan masukan atau ‘simbolstring’ tidak boleh kosong, dan ‘balanced’ juga harus bernilai True. Untuk lebih jelasnya, silahkan pelajari lebih lanjut mengenai perulangan...

         symbol = symbolString[index]

nah code di atas digunakan untuk mengambil huruf demi huruf yang ada pada ‘simbolSting’ yang merupakan parameter dari class pengecek tanda kurung ini... untuk mempelajari lebih lanjut mengenai parameter, silahkan kalian cari di google.
Nah cara mengambil huruf demi huruf  yang ada di parameter, variabel ‘simbol’ ini menggunakan indek... yang nantinya akan berulang dari angka pertama yaitu 0 dan akan bertambah sampai banyak nya teks yang ada di parameter class ini yaitu ‘simbolString’.

        if symbol == "(":
             s.push(symbol)
        elif symbol == “)” :
             if s.isEmpty():
                 balanced = False
             else:
                 s.pop() 
        index = index + 1

nah untuk code diatas, merupakan inti dari programnya. Karena, diatas merupakan sebuah pengkondisian atau penentuan.. jika kalian belum tau apa itu pengkondisian, silahkan kalian baca DISINI ya... nah kembali lagi, jika variabel “symbol” berisi tanda kurung buka  “(“ maka tanda kurung tersebut akan di masukkan kedalam teks. Kemudian, apabila variabel “symbol” berisi kurung tutup “)” maka akan di cek terlebih dahulu apakah stack dalam keadaan kosong atau tidak. Jika berada pada keadaan kosong, maka langsung kita kasi nilai “balanced” nya false. Karena sudah pasti, teks yang berisi tanda kurung tersebut sudah tidak seimbang. Karena tidak ada tanda kurung buka tapi ada kurung tutup nya. Tapi, jika stack ada isi nya, maka kita akan keluarkan elemen stack sebanyak satu buah. Setelah itu, nilai di dalam variabel “index” akan bertambah sebanyak 1.

    if balanced and s.isEmpty():
         return True
     else:
         return False 

nah code diatas, digunakan untuk menentukan output nantinya. Jika “balanced” bernilai “True” , dan stack berada dalam keadaan kosong, maka class ini akan mengembalikan nilai “True”.  Yang berarti, tanda kurung berada pada kondisi seimbang.Tetapi, jika salah satu dari kedua penentu “balanced” dan “s.isEmpty” bernilai “False” , maka class akan mengembalikan nilai “False” yang artinya tanda kurung tidak seimbang.

print(parChecker('((moham(villa))apdg)'))
print(parChecker('villa(moham(apdg)'))

nah untuk code diatas, merupakan sebuah pemanggilan class parChecke yang sudah kita buat tadi... yang sekaligus mencetak nilai kembaliah dari class yang di panggil tersebut...


Nah itu dia teman – teman.. ulasan saya mengenai stack dan queue... sebenarnya ini merupakan materi dari mata kuliah yang pernah dan sudah saya dapat kan di semester dua dulu.. jadi materi ini saya bagikan, dengan harapan dapat memberikan manfaat bagi yang membutuhkan referensi mengenai materi yang satu ini..


Nah sekian dulu ya teman – teman pada kesampatan kali ini.. seperti yang sudah saya katakan diatas, semoga postingan ini dapat bermanfaat... dan jangan lupa berkomentar di bawah postingan ini ya... biar ada responnya.. hehe jika kalian berkenan, mohon di share ke teman sosial media kalian ya.. siapa tau ada yang membutuhkan mengenai informasi yang satu ini... terimakasih sudah membaca dan berkunjung ke blog.. 

wassalamualaikum wr. wb.
Previous
Next Post »
Thanks for your comment