400 likes | 658 Views
STACK. Materi 4 Latifah Rifani. PENDAHULUAN. Penyimpanan dan pengambilan data yang sangat efektif apabila data yang terakhir masuk adalah data yang akan diambil pertama kali. Tumpukan memungkinkan akses ke satu item data saja , yaitu item terakhir yang disisipkan .
E N D
STACK Materi 4 LatifahRifani
PENDAHULUAN • Penyimpanandanpengambilan data yang sangatefektifapabila data yang terakhirmasukadalah data yang akandiambilpertama kali. • Tumpukanmemungkinkanakseskesatu item data saja, yaitu item terakhir yang disisipkan. • Bilakitamenghilangkan item inimakakitabisamengakseskesebelah item terakhir yang disisipkan, danseterusnya.
SEJARAH • Tumpukanpertama kali diusulkanpadatahun 1955, dankemudiandipatenkanpadatahun 1957, oleh Friedrich L. Bauer Jerman. • Konsepyang samadikembangkansecaraindependen, padasekitarwaktu yang sama, oleh Leonard Charles Australia Hamblin.
PENGERTIAN • Merupakantumpukan data yang seolah-olahdiletakkan di atas data yang lain. • Kita dapatmenambahkan (menyisipkan) data danmengambil (menghapus) data melaluiujung yang sama, yang disebutsebagaiujungatas stack (top of stack).
Stack bersifat LIFO (Last In First Out). • Benda yang terakhir masuk ke dalam stack akan menjadi yang pertamakeluar dari stack.
ILUSTRASI 1 A B C C Top of stack B B A A A
ILUSTRASI 2 D D masuk C C keluar B B A A
MISALNYA: Terdapat stack S=(a1, a2, a3, …, an) • Elemenmana yang merupakanelementerbawah. • Elemenmana yang merupakanelemen paling atas. • Elemenmana yang akandikeluarkan. • Elemenmana yang paling akhirdikeluarkan.
KARAKTERISTIK STACK • Elemen stack yaitu item-item data di elemen stack. • Top (elemenpuncakdari stack) • Jumlahelemenpada stack. • Status / kondisi stack.
KONDISI STACK Kondisi stack yang perludiperhatikanadalah: • Penuh: bilaelemen stack mencapaikapasitasmaksimum. Padakondisiinitidakmungkindilakukanpenambahanke stack. Penambahanelemenmenyebabkankondisikesalahanoverflow.
Kosong: bilatidakadaelemen di stack. Padakondisiini, tidakmungkindilakukanpengambilanelemendari stack. Pengambilanelemenmenyebabkankondisikesalahanunderflow.
STACK REPRESENTASI STATIS • Biasanyadiimplementasikandenganmenggunakan array. • Karenaitu, stack denganrepresentasistatisdapatmengalamikondisielemenpenuh.
STACK REPRESENTASI DINAMIS • Biasanyadiimplementasikandenganmenggunakan pointer yang menunjukpadaelemen-elemen yang dialokasikanpadamemori. • Elemenditambahkanakanmenggunakanpenambahanelemenpadaawal stack (addfirst). • Saatpengambilanataupenghapusanelemenmenggunakanpenghapusan di awal stack (delfirst).
OPERASI PUSH • Adalahoperasimenambahkanelemenbarupadasebuah stack. • Aturanpenambahan stack: • Sebagaikondisiawaladasebuah stack yang telahmemilikibeberapaelemendenganelemen paling atassebagai top. • Dibuatsebuahelemenbaru yang akandimasukkankedalam stack.
Elemenbarudimasukkankedalam stack. • Penunjuk top pada stack diubahmenunjukkeelemen yang barusajaditambahkan. Elemenbaru top top
OPERASI POP • Adalahoperasimengambilsebuahelemendarisebuah stack. Aturanmengambilsebuahelemendarisebuah stack adalahsebagaiberikut: • Sebagaikondisiawaladasebuah stack yang telahmemilikibeberapaelemendenganelemen paling atassebagai top. • Penunjuk top diubahmenjadimenunjukelemen di bawahelemenatas. • Elemenatasdiambildari stack.
ILUSTRASI Elemenkeluar top top
CONTOH • Ada sekumpulanperintah stack yaitu push(3), push(5), pop, push(2), pop, pop. • Makaapabiladijalankanmakahasilnyaadalah: T T 5 2 3 3 3 3 3 T T T Top = 0 kosong Push 3 Push 5 Pop Push 2 Pop Pop Stack kosong
CREATE • Operator iniberfungsiuntukmembuatsebuah stack kosong.
ISEMPTY • Operator iniberfungsiuntukmenentukanapakahsuatu stack adalah stack kosong. Operasinyaakanbernilaiboolean, dengandefinisisebagaiberikut : ISEMPTY(S) = true, jika S adalah stack kosong = false, jika S bukan stack kosong atau ISEMPTY(S) = true, jika(S) = NULL = false, jika(S)= 1 Catatan : ISEMPTY(CREATE(S)) = true.
ISFULL • Operator iniberfungsiuntukmenentukanapakahsuatu stack adalah stack penuh. Operasinyaakanbernilaiboolean, dengandefinisisebagaiberikut : ISFULL(S) = true, jika S adalah stack penuh = false, jika S bukan stack penuh Catatan : ISEMPTY(CREATE(S)) = true.
PENGGUNAAN STACK • Dalamduniakomputer, penggunaanstack (tumpukan) merupakansuatuhal yang umumdigunakansepertiuntukpenentuanalamat memory, penempatanruang data danaplikasi lain. • Aplikasistackjugadigunakanuntukberbagaimacamkeperluansepertipengujiankalimatpalindrome, pengujitandakurung (matching parentheses), danjugaberfungsisebagaikonversidarinotasiinfix menjadinotasipostfix.
Sebuahkompilatormempunyaitugas, salahsatu di antaranyaadalahmenyelidikiapakahPemrogramtelahdengancermatmengikutiaturantatabahasa, atausintaksdaribahasapemrograman yang bersangkutan. • Misalnyauntukparantheseskiri (tandakurungbuka) yang diberikan, harusdipastikanadanyaparantheseskanan (tandakurungtutup) yang bersangkutan.
MATCHING PARENTHESES • Proses inidilakukan compiler untukmemeriksakelengkapantandakurung yang terdapatpadasuatuekspresiaritmetik. Sedangkan stack di sinidigunakansebagaitempatprosesnya. • Algoritmayang digunakanadalah : • Elemen-elemensuatuekspresiaritmetik (string) di-Scan darikirikekanan. • Jikaditemukansimbol "(" atau "Left parenthesis", makasimboltersebut di-push kedalam stack.
Jikaditemukansimbol ")" atau "Right parenthesis", makaisi stack diperiksa. • Jikastack kosongterjadikesalahan. • berarti: adasimbol ")", tetapitidakadasimbol "(" yang seharusnyamendahului. • Jikastack tidakkosongartinyaadapasangannyadanlangsung di-POP keluarstack.
INTERPRETER POSTFIX • Contoh lain penggunaan stack adalahpemeriksaandaneksekusiekpresi postfix. • Ekspresipostfix merupakanekpresidenganaturan L R B dengan L adalah operand kiri, R operand kanandan B adalahoperatornya. • Ekspresiyang kitabiasagunakansehari-hariadalahekspresi infix denganaturan L B R. Contoh, jikaekspresiinfixnya "6*7-2" makaekspresipostfixnyaadalah "6 7 * 2 -".
NOTASI INFIX DAN POSTFIX • Suatuperhitunganaritmatikabiasanyaberhubungandengan operand dan operator. Operand merupakansuatukarakteratauelemen yang nilainyadioperasikandenganbantuansuatu operator untukmenghasilkansuatusolusi.
Misalkanjikadiberikansuatuekspresiaritmatika 2 * 3, makaelemen ‘dua’ danelemen ‘tiga’ merupakan operand dariekspresitersebutdanelemen ‘*’ merupakan operator perkalianatasdua operand yang menghasilkansuatusolusi.
Dalampenggunaannya, dalamkehidupansehari-harinotasiinfixmerupakannotasiaritmatika yang paling banyakdigunakanuntukmengekspresikansuatuperhitunganartimatikdibandingdenganduanotasi yang lain. • Akan tetapinotasiPostfixmerupakannotasi yang digunakanolehmesinkompilasipadakomputerdenganmaksuduntukmempermudah proses pengkodean, sehinggamesinkompilasimembutuhkanstackuntuk proses translasiekspresitersebut.
NOTASI POSTFIX • Bentukaplikasi stack yang lain adalahmengubahsuatuekspresiaritmatik (string) kedalamnotasi postfix. Notasi postfix inidigunakanoleh compiler untukmenyatakansuatuekspresiaritmatikdalambahasatingkattinggi (high level language). Stack digunakanoleh compiler untukmentransformasikanekspresiaritmatikmenjadisuatuekspresidalambentuk/notasi postfix.
Contoh : • Misaldiberikanekspresiaritmatik : A + B ; • Makabentuknyadalamnotasi postfix menjadi : AB+
Urutan (prioritas) dari operator adalah : • Perpangkatan(^) • Perkalian(*) atauPembagian (/) • Penjumlahan(+) atauPengurangan (-)
ATURAN DALAM PROSES TRANSFORMASI KE POSTFIX • Ekspresiaritmatik yang diberikan di- "Scan" darikirikekanan. • Bilasimbol yang di-scan adalah "(", makasimboltersebut di push kedalam stack. • Bilasimbol yang di-scan adalah ")", makaseluruhisi stack di pop keluarmulaidarisimbol "(" yang pertamaditemukandalam stack. • Bilasimboladalah operator, makadilakukanperbandinganduludengansimbol (operator) yang beradapadaposisi top dalamstack: • Jikaderajatnyasetaraataulebihrendahdarisimbol yang beradapadaposisi top, maka top stack di-pop keluarsebagai output dansimbol yang baru di-push kedalam stack.
Jikaderajatnyalebihtinggidarisimbol yang beradapadaposisi top, makasimbol (operator) yang di-scan tersebut di-push kedalam stack. • Bilasimbol yang di-scan adalah operand, makasimboltersebutlangsungsebagai output. • Bilasimboladalah ";" makaseluruhisi stack di-pop sebagai output.
CONTOH • 3 + 2 * 5 • (A + B) * (C – D) / E;
SOAL: Ubahbentukaritmetikaberikutkedalambentuk postfix • ( (A + B) * C / D + E ^ F ) / G ; • ((A * B) + C / D – E * F) * G; A B + D * C / E F ^ + G / A B * C D / + E F * - G *