STAC K FARID WAJDI YUSUF 1 PENDAHULUAN Penyimpanan

  • Slides: 36
Download presentation
STAC K FARID WAJDI YUSUF 1

STAC K FARID WAJDI YUSUF 1

PENDAHULUAN Penyimpanan dan pengambilan data yang sangat efektif apabila data yang terakhir masuk adalah

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. Bila kita menghilangkan item ini maka kita bisa mengakses ke sebelah item terakhir yang disisipkan, dan seterusnya.

SEJARAH Tumpukan pertama kali diusulkan pada tahun 1955, dan kemudian dipatenkan pada tahun 1957,

SEJARAH Tumpukan pertama kali diusulkan pada tahun 1955, dan kemudian dipatenkan pada tahun 1957, oleh Friedrich L. Bauer Jerman. Konsep yang sama dikembangkan secara independen, pada sekitar waktu yang sama, oleh Leonard Charles Australia Hamblin.

PENGERTIAN Merupakan tumpukan data yang seolah-olah diletakkan di atas data yang lain. Kita dapat

PENGERTIAN Merupakan tumpukan data yang seolah-olah diletakkan di atas data yang lain. Kita dapat menambahkan (menyisipkan) data dan mengambil (menghapus) data melalui ujung yang sama, yang disebut sebagai ujung atas stack (top of stack).

 Stack bersifat LIFO (Last In First Out). Benda yang terakhir masuk ke dalam

Stack bersifat LIFO (Last In First Out). Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack.

ILUSTRASI 1 A B C C A B B A A Top of stack

ILUSTRASI 1 A B C C A B B A A Top of stack

ILUSTRASI 2 D m a s u k D C C B B A

ILUSTRASI 2 D m a s u k D C C B B A A k e l u a r

MISALNYA: Terdapat stack S=(a 1, a 2, a 3, …, an) 1. Elemen mana

MISALNYA: Terdapat stack S=(a 1, a 2, a 3, …, an) 1. Elemen mana yang merupakan elemen terbawah. 2. Elemen mana yang merupakan elemen paling atas. 3. Elemen mana yang akan dikeluarkan. 4. Elemen mana yang paling akhir dikeluarkan.

KARAKTERISTIK STACK Elemen stack yaitu item-item data di elemen stack. Top (elemen puncak dari

KARAKTERISTIK STACK Elemen stack yaitu item-item data di elemen stack. Top (elemen puncak dari stack) Jumlah elemen pada stack. Status / kondisi stack.

KONDISI STACK Kondisi stack yang perlu diperhatikan adalah: 1. Penuh: bila elemen stack mencapai

KONDISI STACK Kondisi stack yang perlu diperhatikan adalah: 1. Penuh: bila elemen stack mencapai kapasitas maksimum. Pada kondisi ini tidak mungkin dilakukan penambahan ke stack. Penambahan elemen menyebabkan kondisi kesalahan overflow.

2. Kosong: bila tidak ada elemen di stack. Pada kondisi ini, tidak mungkin dilakukan

2. Kosong: bila tidak ada elemen di stack. Pada kondisi ini, tidak mungkin dilakukan pengambilan elemen dari stack. Pengambilan elemen menyebabkan kondisi kesalahan underflow.

STACK REPRESENTASI STATIS Biasanya diimplementasikan dengan menggunakan array. Karena itu, stack dengan representasi statis

STACK REPRESENTASI STATIS Biasanya diimplementasikan dengan menggunakan array. Karena itu, stack dengan representasi statis dapat mengalami kondisi elemen penuh.

STACK REPRESENTASI DINAMIS Biasanya diimplementasikan dengan menggunakan pointer yang menunjuk pada elemen-elemen yang dialokasikan

STACK REPRESENTASI DINAMIS Biasanya diimplementasikan dengan menggunakan pointer yang menunjuk pada elemen-elemen yang dialokasikan pada memori. Elemen ditambahkan akan menggunakan penambahan elemen pada awal stack (addfirst). Saat pengambilan atau penghapusan elemen menggunakan penghapusan di awal stack (delfirst).

OPERATOR DI DALAM STACK

OPERATOR DI DALAM STACK

OPERASI PUSH Adalah operasi menambahkan elemen baru pada sebuah stack. Aturan penambahan stack: Sebagai

OPERASI PUSH Adalah operasi menambahkan elemen baru pada sebuah stack. Aturan penambahan stack: Sebagai kondisi awal ada sebuah stack yang telah memiliki beberapa elemen dengan elemen paling atas sebagai top. Dibuat sebuah elemen baru yang akan dimasukkan ke dalam stack.

 Elemen baru dimasukkan ke dalam stack. Penunjuk top pada stack diubah menunjuk ke

Elemen baru dimasukkan ke dalam stack. Penunjuk top pada stack diubah menunjuk ke elemen yang baru saja ditambahkan. Elemen baru top

OPERASI POP Adalah operasi mengambil sebuah elemen dari sebuah stack. Aturan mengambil sebuah elemen

OPERASI POP Adalah operasi mengambil sebuah elemen dari sebuah stack. Aturan mengambil sebuah elemen dari sebuah stack adalah sebagai berikut: Sebagai kondisi awal ada sebuah stack yang telah memiliki beberapa elemen dengan elemen paling atas sebagai top. Penunjuk top diubah menjadi menunjuk elemen di bawah elemen atas. Elemen atas diambil dari stack.

ILUSTRASI Elemen keluar top

ILUSTRASI Elemen keluar top

CONTOH Ada sekumpulan perintah stack yaitu push(3), push(5), pop, push(2), pop. Maka apabila dijalankan

CONTOH Ada sekumpulan perintah stack yaitu push(3), push(5), pop, push(2), pop. Maka apabila dijalankan maka hasilnya adalah: T T Top = 0 kosong T 5 3 3 Push 5 T 2 3 3 Pop Push 2 T 3 Pop Stack kosong

CREATE Operator ini berfungsi untuk membuat sebuah stack kosong.

CREATE Operator ini berfungsi untuk membuat sebuah stack kosong.

ISEMPTY Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan

ISEMPTY 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 (S) = NULL = false, jika (S)= 1 Catatan : ISEMPTY(CREATE(S)) = true.

ISFULL Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack penuh. Operasinya akan

ISFULL Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack penuh. Operasinya akan bernilai boolean, dengan definisi sebagai berikut : ISFULL(S) = true, jika S adalah stack penuh = false, jika S bukan stack penuh Catatan : ISEMPTY(CREATE(S)) = true.

PENGGUNAAN STACK Dalam dunia komputer, penggunaan stack (tumpukan) merupakan suatu hal yang umum digunakan

PENGGUNAAN STACK Dalam dunia komputer, penggunaan stack (tumpukan) merupakan suatu hal yang umum digunakan seperti untuk penentuan alamat memory, penempatan ruang data dan aplikasi lain. Aplikasi stack juga digunakan untuk berbagai macam keperluan seperti pengujian kalimat palindrome, penguji tanda kurung (matching parentheses), dan juga berfungsi sebagai konversi dari notasi infix menjadi notasi postfix.

 Sebuah kompilator mempunyai tugas, salah satu di antaranya adalah menyelidiki apakah Pemrogram telah

Sebuah kompilator mempunyai tugas, salah satu di antaranya adalah menyelidiki apakah Pemrogram telah dengan cermat mengikuti aturan tata bahasa, atau sintaks dari bahasa pemrograman yang bersangkutan. Misalnya untuk parantheses kiri (tanda kurung buka) yang diberikan, harus dipastikan adanya parantheses kanan (tanda kurung tutup) yang bersangkutan.

MATCHING PARENTHESES Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada

MATCHING PARENTHESES Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah : 1. 2. Elemen-elemen suatu ekspresi aritmetik (string) di -Scan dari kiri ke kanan. Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut di-push ke dalam stack.

3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa. Jika stack

3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa. Jika stack kosong terjadi kesalahan. berarti : ada simbol ")", tetapi tidak ada simbol "(" yang seharusnya mendahului. Jika stack tidak kosong artinya ada pasangannya dan langsung di-POP keluar stack.

INTERPRETER POSTFIX Contoh lain penggunaan stack adalah pemeriksaan dan eksekusi ekpresi postfix. Ekspresi postfix

INTERPRETER POSTFIX Contoh lain penggunaan stack adalah pemeriksaan dan eksekusi ekpresi postfix. Ekspresi postfix merupakan ekpresi dengan aturan L R B dengan L adalah operand kiri, R operand kanan dan B adalah operatornya. Ekspresi yang kita biasa gunakan sehari-hari adalah ekspresi infix dengan aturan L B R. Contoh, jika ekspresi infixnya "6*7 -2" maka ekspresi postfixnya adalah "6 7 * 2 -".

NOTASI INFIX DAN POSTFIX Suatu perhitungan aritmatika biasanya berhubungan dengan operand dan operator. Operand

NOTASI INFIX DAN POSTFIX Suatu perhitungan aritmatika biasanya berhubungan dengan operand dan operator. Operand merupakan suatu karakter atau elemen yang nilainya dioperasikan dengan bantuan suatu operator untuk menghasilkan suatu solusi.

 Misalkan jika diberikan suatu ekspresi aritmatika 2 * 3, maka elemen ‘dua’ dan

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.

 Dalam penggunaannya, dalam kehidupan sehari notasi infix merupakan notasi aritmatika yang paling banyak

Dalam penggunaannya, dalam kehidupan sehari notasi infix merupakan notasi aritmatika yang paling banyak digunakan untuk mengekspresikan suatu perhitungan artimatik dibanding dengan dua notasi yang lain. Akan tetapi notasi Postfix merupakan notasi yang digunakan oleh mesin kompilasi pada komputer dengan maksud untuk mempermudah proses pengkodean, sehingga mesin kompilasi membutuhkan stack untuk proses translasi ekspresi tersebut.

NOTASI POSTFIX Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke

NOTASI POSTFIX Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi postfix.

Contoh : Misal diberikan ekspresi aritmatik : A + B ; Maka bentuknya dalam

Contoh : Misal diberikan ekspresi aritmatik : A + B ; Maka bentuknya dalam notasi postfix menjadi : AB+

Urutan (prioritas) dari operator adalah : 1. Perpangkatan (^) 2. Perkalian (*) atau Pembagian

Urutan (prioritas) dari operator adalah : 1. Perpangkatan (^) 2. Perkalian (*) atau Pembagian (/) 3. Penjumlahan (+) atau Pengurangan (-) OPERATOR ARTI PRIORITAS ^ PANGKAT 3 * / KALI BAGI 2 + - TAMBAH KURANG 1

ATURAN DALAM PROSES TRANSFORMASI KE POSTFIX Ekspresi aritmatik yang diberikan di- "Scan" dari kiri

ATURAN DALAM PROSES TRANSFORMASI KE POSTFIX Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan. Bila simbol yang di-scan adalah "(", maka simbol tersebut di push ke dalam stack. Bila simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar mulai dari simbol "(" yang pertama ditemukan dalam stack. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol (operator) yang berada posisi top dalam stack: Jika derajatnya setara atau lebih rendah dari simbol yang berada posisi top, maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke dalam stack.

 Jika derajatnya lebih tinggi dari simbol yang berada posisi top, maka simbol (operator)

Jika derajatnya lebih tinggi dari simbol yang berada posisi top, maka simbol (operator) yang di-scan tersebut di-push ke dalam stack. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai output. Bila simbol adalah "; " maka seluruh isi stack di-pop sebagai output.

CONTOH 3 +2*5 (A + B) * (C – D) / E;

CONTOH 3 +2*5 (A + B) * (C – D) / E;