760 likes | 1.39k Views
Stack. Pertemuan 11. Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman Bersifat LIFO (Last In First Out) Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.
E N D
Stack Pertemuan 11
Stack atautumpukanadalahsuatustuktur data yang pentingdalampemrograman • BersifatLIFO (Last In First Out) • Benda yang terakhirmasukkedalam stack akanmenjadibendapertamayang dikeluarkandari stack
Karenakitamenumpuk Compo diposisiterakhir, maka Compo akanmenjadielementeratasdalamtumpukan. • Sebaliknya, karenakitamenumpukTelevisipada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. • Dan jikakitamengambilelemendaritumpukan, makasecaraotomatisakanterambilelementeratas, yaituCompo juga.
Operasi-operasi/fungsi Stack • Push : digunakan untuk menambah item pada stack pada tumpukan paling atas • Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas • Clear : digunakanuntukmengosongkan stack • IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong • IsFull: fungsi yang digunakanuntukmengecekapakah stack sudahpenuh
Stack with Array of Struct • DefinisikanStack denganmenggunakanstruct • DefinisikanMAX_STACK untukmaksimumisi stack • Buatlahvariabel array data sebagaiimplementasi stack secaranyata • Deklarasikanoperasi-operasi/function diatasdanbuatimplemetasinya
Deklarasi MAX_STACK #define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9 • Deklarasi STACK denganstructdan array data typedefstruct STACK{ int top; char data[10][10]; //misalkan : data adalah array of string //berjumlah 10 data, masing-masing string //menampungmaksimal 10 karakter }; • Deklarasi/buatvariabeldaristruct STACK tumpuk;
Inisialisasi Stack - Padamulanyaisi top dengan -1, karena array dalam C dimulaidari 0, yang berarti stack adalah KOSONG! - Top adalahsuatuvariabelpenandadalam STACK yang menunjukkanelementeratas Stack sekarang. Top Of Stack akanselalubergerakhinggamencapai MAX of STACK sehinggamenyebabkan stack PENUH!
FungsiIsFull - Untukmemeriksaapakah stack sudahpenuh? - Dengan cara memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jikabelum (masihlebihkecildari MAX_STACK-1) makabelumfull
FungsiIsEmpty - Untukmemeriksaapakah stack masihkosong? - Dengancaramemeriksa top of stack, jikamasih -1 makaberarti stack masihkosong! - Program:
Fungsi Push - Untukmemasukkanelemenke stack, selalumenjadielementeratas stack - Tambahsatu (increment) nilai top of stack terlebihdahulusetiap kali adapenambahan elemen stack, asalkan stack masihbelumpenuh, kemudianisikannilaibaruke stack berdasarkanindeks top of stack setelahditambahsatu (diincrement)
Fungsi Pop - Untuk mengambil elemen teratas dari stack. - Ambildahulunilaielementeratas stack denganmengakses top of stack, tampilkan nilai yang akandiambilterlebihdahulu, barudidecrementnilai top of stack sehingga jumlahelemen stack berkurang
Fungsi Print - Untukmenampilkansemuaelemen-elemen stack - Dengancara looping semuanilai array secaraterbalik, karenakitaharusmengaksesdariindeks array tertinggiterlebihdahulubarukeindeks yang kecil!
CONTOH PEMANFAATAN STACK • Notasi Infix Prefix • Notasi Infix Postfix Pemanfaatan stack antara lain untukmenulisungkapandenganmenggunakannotasitertentu. Contoh : ( A + B ) * ( C – D ) Tandakurungselaludigunakandalampenulisanungkapannumerisuntukmengelompokkanbagianmana yang akandikerjakanterlebihdahulu. Dari contoh ( A + B ) akandikerjakanterlebihdahulu, kemudianbaru ( C – D ) danterakhirhasilnyaakandikalikan. A + B * C – D B * C akandikerjakanterlebihdahulu, hasil yang didapatakanberbedadenganhasilnotasidengantandakurung.
Notasi Infix Prefix Cara penulisanungkapanyaitudenganmenggunakannotasi infix, yang artinya operator ditulisdiantara 2 operand. Seorangahlimatematikabernama Jan Lukasiewicczmengembangkansuatucarapenulisanungkapannumeris yang disebut prefix, yang artinya operator ditulissebelumkedua operand yang akandisajikan. Contoh : Proseskonversi dari infix ke prefix : = ( A + B ) * ( C – D ) = [ + A B ] * [ - C D ] = * [ + A B ] [ - C D ] = * + A B - C D
Notasi Infix Postfix Cara penulisanungkapanyaitudenganmenggunakannotasi postfix, yang artinya operator ditulissesudah operand. Contoh : Proseskonversi dari infix ke postfix : = ( 6 - 2 ) * ( 5 + 4 ) = [ 6 2 - ] * [ 5 4 + ] = [ 6 2 - ] [ 5 4 + ] * = 6 2 - 5 4 + *
Contoh : Penggunaan notasi postfix dalam stack, misal : 2 14 + 5 * = 80
Konversi Infix ke Postfix • Baca ungkapandalamnotasi infix, misalnya S, tentukanpanjangungkapantersebut, misalnya N karakter, siapkansebuah stack kosongdansiapkanderajatmasing-masing operator, misalnya : ^ berderajat 3, * dan / berderajat 2, + dan – berderajat 1, ( dan ) berderajat 0. • Dimulaidarii=1 sampai N kerjakanlangkah-langkahsbb : • R = S[1] • Test nilai R. Jika R adalah : operand : langsungditulis kurungbuka: push kedalamtumpukan
Konversi Infix ke Postfix kurungtutup : pop dantulissemuaisitumpukansampaiujungtumpukan= ‘(‘ ini, tetapitidakusahditulis. Operator : jikatumpukankosongatauderajat R lebihtinggidibandingderajatujungtumpukan, push operator kedalamtumpukan. Jikatidak, pop ujungtumpukandantulis, kemudianulangipembandingan R denganujungtumpukan, kemudian R di-push. c. Jikaakhirnotasi infix telahtercapai, dantumpukanmasih belumkosong, pop semuaisitumpukandantulishasilnya.