380 likes | 551 Views
STACK. FARID WAJDI YUSUF. 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 FARID WAJDI YUSUF
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;