Resume Stack Widya

9
RESUME STACK Stack (tumpukan) dapat dikatakan sebagai list yang operasi penghapusan dan pemyisipan elemennya dilakukan disatu ujung. Dalam kehidupan sehari-hari, terdapat banyak kejadian yang mempunyai sifat seperti stack, salah satunya adalah ceritadibawah ini: Perhatikan sebuah tumpukian piring disebuah warung makan.Piring-piring tersebut tersusun rapat dari atas ke bawah(membentuk barisan berurutan). Setiap kali ada pembeli datang, maka piring yang paling atas akan diambil(menghapus elemen) yang berarti mengurangi jumlah piring dalam tumpukan. Bila tumpukan itu sudah habis atau tinggal sedikitmaka pegawai warung akan menambahkan piring lain yang masih bersih (menambah elemen) piring yang paling terakhir diletakkan pasti akan terletak ditumpukan paling atas dan piring yang terletak paling atas dalam tumpukan itu pasti merupakan tumpukan piring yang terakhir kali dimasukkan. Kesimpulannya adalah penambahan dan penghapusan elemen hanya dapat dilakukan diujung atas tumpukan piring. Proses seperti itu biasa disebut Last In First Out(LIFO). Secara formal sebuah stack bertipe T didefinisikan sebagai sebuah barisan berhingga atas elemen- elemen bertipe T, bersama-sama dengan operasinya berikut: 1) Inisiasi stack menjadi kosong. 2) Mencari tahu status stack kosong atau tidak. 3) Mencari tahu stack penuh atau tidak. 4) Mencari panjang stack(jumlah elemen stack). 5) Memasukkan elemen baru pada stack, yaitu top stack jika stack tidak penuh.

description

stack

Transcript of Resume Stack Widya

RESUME STACKStack (tumpukan) dapat dikatakan sebagai list yang operasi penghapusan dan pemyisipan elemennya dilakukan disatu ujung. Dalam kehidupan sehari-hari, terdapat banyak kejadian yang mempunyai sifat seperti stack, salah satunya adalah ceritadibawah ini: Perhatikan sebuah tumpukian piring disebuah warung makan.Piring-piring tersebut tersusun rapat dari atas ke bawah(membentuk barisan berurutan). Setiap kali ada pembeli datang, maka piring yang paling atas akan diambil(menghapus elemen) yang berarti mengurangi jumlah piring dalam tumpukan. Bila tumpukan itu sudah habis atau tinggal sedikitmaka pegawai warung akan menambahkan piring lain yang masih bersih (menambah elemen) piring yang paling terakhir diletakkan pasti akan terletak ditumpukan paling atas dan piring yang terletak paling atas dalam tumpukan itu pasti merupakan tumpukan piring yang terakhir kali dimasukkan. Kesimpulannya adalah penambahan dan penghapusan elemen hanya dapat dilakukan diujung atas tumpukan piring. Proses seperti itu biasa disebut Last In First Out(LIFO). Secara formal sebuah stack bertipe T didefinisikan sebagai sebuah barisan berhingga atas elemen-elemen bertipe T, bersama-sama dengan operasinya berikut:1) Inisiasi stack menjadi kosong. 2) Mencari tahu status stack kosong atau tidak. 3) Mencari tahu stack penuh atau tidak. 4) Mencari panjang stack(jumlah elemen stack). 5) Memasukkan elemen baru pada stack, yaitu top stack jika stack tidak penuh. 6) Jika stack tidak kosong, mengambil elemen teratas(top stack). Stack pada Struktur Data dapat diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak. Dalam penyajiannya, stack bisa memakai array atau linked list. Adapun definisi-definisi seperti :Definisi 1: Stack adalah suatu koleksi atau kumpulan item data yang teroganisasi dalam bentuk urutan linear, yang operasi pemasukan dan penghapusan datanya dilakukan pada salah satu sisinya.Definisi 2: Diberikan suatu himpunan yang terurut himpunan sebagai S = {S1, S2, ......., ST}, T pada anggota S merupakan linier order, sehingga stack dari himpunan tersebut memiliki informasi sebagai berikut: 1. Elemen puncak dari stack dalam himpunan S dikatakan sebagai TOP, sehingga : TOP[S} = ST ............................................................................(1) 2. Banyaknya elemen stack dalam himpunan S dikatakan sebagai NOEL, sehingga NOEL = T, dimana himpunan dari S tersebut dapat disusun sebagai : S = {S1, S2, .........., SNOEL} ..................................................(2).Suatu stack dalam keadaan kosong akan memiliki informasi NOEL(S) = 0 dan TOP(S)= undefined. S 2. Untuk stack yang bukan kosong, maka akan memiliki informasi seperti yang digambarkan di bawah ini dimana informasi yang ada adalah NOEL(S) = 1 dan TOP(S) = Merah. S 3. Untuk stack yang berisi lebih dari n jumlah data maka informasi yang ada pada stack tersebut berisikan NOEL(S) = 2 (jika berisi 2 data) dan TOP(S) = Biru seperti ditunjukan pada gambar di bawah ini : S Elemen-elemen yang berada dalam stack tersebut di atas, memiliki prinsip dasar dalam pengoperasiannya yaitu prinsip LIFO (Last In First Out) atau yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan.Suatu stack dapat digambarkan sebagai suatu array (larik) berdimensi satu yang elemen-elemennya berkisar antara 1 sampai n elemen. Dengan demikian jika suatu stack didefinisikan dengan n elemen maka dapat dikatakan jumlah maksimum dari stack atau NOEL(S) nya adalah n, sehingga penambahan elemen stack yang ke n+1 tidak diperkenankan atau stack tersebut dalam kondisi overflow.Stack dapat dideklarasikan sebuah record yang mempunyai sebuah array data untuk menyimpan elemen stack dan sebuah variabel Top untuk menunjuk stack elemen atas (top element). Ada empat operasi dasar yang didefinisikan pada stack, yaitu : 1. CREATE(stack) Create Operasi Create (Stack) digunakan untuk membuat suatu stack baru dengan nama stack, yang nilai elemen saat stack tersebut dibuat adalah NOEL(S) = 0, TOP(S) = NULL (tidak terdefinisikan). Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa : NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null Algoritma Create(S) Algoritma ini memuat suatu prosedur untuk membuat stack, yang memberikan kondisi noel dari stack akan bernilai nol dan top dari stack tersebut belum dapat didefinisikan.2. ISEMPTY(stack) IsEmpty Operasi ini merupakan operasi untuk mencek isi dari suatu stack dalam keadaan kosong atau berisi. Operasi ini memiliki 2 (dua) kondisi boolean yaitu : a. True jika stack tersebut kosong atau dapat dikatakan NOEL(S) = 0. b. False jika stack tersebut tidak dalam kondisi kosong atau dapat dikatakan NOEL(S) > 0. Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut : ISEMPTY(S) = true, jika S adalah stack kosong. = false, jika S bukan stack kosong. atau ISEMPTY(S) = true, jika NOEL(S) = 0. = false, jika NOEL(S) 0. Procedure Create(var S : Stack); Begin S.Noel := 0; . End; Catatan : ISEMPTY(CREATE(S)) = true Algoritma IsEmpty(S) Algoritma untuk operasi Isempty memberikan informasi Boolean yaitu kondisi benar (true) atau salah (False), sehingga pada implementasinya algoritma ini menggunakan fungsi yang dibuat sendiri.3. PUSH(elemen,stack) Push Operasi ini merupakan operasi untuk menambahkan satu elemen dengan nilai E pada puncak suatu stack, sehingga posisi TOP(S) akan bernilai E, penerapan operasi push pada suatu stack S akan berakibat overflow jika NOEL(S) dari stack tersebut telah bernilai maksimum. Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah : PUSH(E,S) Artinya : menambahkan elemen E ke dalam stack S. Elemen yang baru masuk ini akan menempati posisi TOP. Jadi : TOP(PUSH(E,S)) = E. Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong. (ISEMPTY(PUSH(E,S)) = false). Algoritma Push(S, E) Dalam merancang algoritma untuk operasi push dimulai dengan melakukan pengecekan atas isi dari stack tersebut dalam keadaan penuh atau tidak. Kondisi stack dalam keadaan maksimum akan mengakibatkan overflow pada stack tersebut sehingga prosedur error trapping perlu didefinisikan untuk mencegah terjadinya overflow condition tersebut. Implementasi dari algoritma push tersebut adalah : Function IsEmpty(Var S : Stack) : Boolean; Begin IsEmpty Procedure Push(Var S : Stack; TipeBAru : Eon); Begin If S.Noel = NoelStack Then Stackerror(1) Else Begin S.Noel := S.Noel + 1; S.Top[S.Noel] := TipeBaru End; End;4. POP(stack)Pop Operasi ini berfungsi untuk menghapus satu elemen dari stack S, sehingga posisi NOEL(S) akan berkurang satu elemen, dan TOP(S) akan berubah. Operasi pop dapat menyebabkan kondisi underflow jika suatu stack S yang berada dalam kondisi minimum dikenakan operasi pop. Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :POP(S). Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya : POP(CREATE(S)) = error condition Catatan : TOP(PUSH(E,S)) = E Algoritma Pop(S) Operasi terakhir dari stack adalah operasi pop yang berfungsi untuk mengeluarkan isi dari dalam stack. Seperti halnya operasi push, pada operasi pop penggunaan error trapping dipakai untuk men-cek kondisi underflow yaitu kondisi stack kosong yang dikenakan operasi pop. Algoritma dari pop ini adalah : Penggunaan error trapping untuk operasi push dan pop didefinisikan lebih lanjut dalam algoritma stackerror yang digunakan untuk menentukan kondisi overflow atau underflow suatu stack. Adapun algoritma dari error trapping ini adalah: Procedure Pop(Var S : Stack; Var NilaiStack : Eon); Begin If S.Noel = 0 Then StackError(2) Else Begin NilaiStack := S.Top[s.Noel]; S.Noel := S.Noel -1 End; End; Procedure StackError(TingkatanError : Integer); Begin Case TingkatanError of 1 : WriteLn(Isi Stack sudah penuh... kondisi overflow); 2 : WriteLn(Isi Stack Kosong ... kondisi underflow) End; End;

Deklarasi Stack pada Bahasa Pemrograman (Pascal) Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa : NOEL(S)=TOP_PTR ISEMPTY(S)= TRUE, jika TOP_PTR = 0 dan FALSE, jika TOP_PTR > 0. Maka bentuk deklarasinya dalam PASCAL adalah : Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur tersendiri, yaitu : TYPE Stack_Struct = Record Stack:array[1..100] of integer; TopPtr : integer; End; VAR S : Stack_Struct; PROCEDURE PUSH(Eon : integer); Begin If (S.TopPtr < NoelMax) Then Begin S.TopPtr := S.TopPtr + 1; S.Stack [S.TopPtr] := Eon End Else Overflow_Condition End; PROCEDURE POP(Eoff : integer); Begin If (S.TopPtr > 0) Then Begin Eoff := S.Stack[S.TopPtr]; S.TopPtr := S.TopPtr-1 End Else Underflow_Condition End;Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack kosong. Eon adalah elemen yang akandimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack. Tabel 1. Perbandingan Operator dalam stack dan operator yang dibaca Operator Nilai operator dalam stack Nilai operator yang dibaca ) 0 ( 0 5 +,- 2 1 *,/ 4 3 Berdasarkan tabel tersebut suatu operator yang dibaca dan akan dimasukan ke dalam stack, terlebih dahulu melalui proses perbandingan nilai dengan operator yang ada di dalam stack sebelumnya. Dalam arti kata lain jika nilai dari operator yang berada dalam stack lebih besar dari nilai operator yang dibaca maka operator yang berada di dalam stack akan dikeluarkan sampai nilai tersebut sama atau lebih kecil. Implementasi dari algoritmanya dapat dijabarkan dalam bentuk fungsi berikut ini : Fungsi IsiDlmstack tersebut di atas merupakan fungsi level operator yang posisinya berada dalam suatu stack, adapun fungsi untuk menentukan level operator yang dibaca adalah : Function IsiDlmStack(Operator:Char):Integer; Begin Case Operator Of ( : IsiDlmStack := 0; +,- : IsiDlmStack := 2; *,/ : IsiDlmStack := 4; End End; Function Stackyangdibaca(Operator : Char) : Integer; Begin Case Operator Of ) : Stackyangbaca := 0; +,- : Stackyangbaca := 1; *,/ : Stackyangbaca := 3; ( : Stackyangbaca := 5 End End;Penggunaan/Aplikasi Stack Suatu perhitungan aritmatika biasanya berhubungan dengan operand dan operator.Operand merupakan suatu karakter atau elemen yang nilainya dioperasikan dengan bantuan suatu operator untuik menghasilkan suatu solusi. Misalkan jika diberikan suatu ekspresi aritmatika 2*3, maka elemen dua dan elemen tiga merupakan operand dari ekspresi tersebut dan elemen * merupakan operator perkalian atas dua operand yang menghasilkan suatu solusi. Suatu ekspresi aritmatika dapat dibedakan dalam tiga bentuk notasi perhitungan yaitu :1) Notasi prefix, jika operator ditempatkan sebelum dua operand. 2) Notasi infix, jika operator ditempatkan diantara dua operand. 3) Notasi postfix, jika operator ditempatkan setelah dua operand.

WIDYA RIZKI DESIANTI14621003TIF A PAGI