STACK
STACK
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 menghilankan item ini maka kita bisa mengakses ke sebelah item terakhir yang disisipkan, dan seterusnya
SEJARAH
Stack pertama kali diperkenalkan oleh Charles Leonard Hamblin pada tahun 1957 dalam kaitannya dengan bahasa pemrograman IPL (Information Processing Language). Konsep stack kemudian menjadi bagian integral dari banyak bahasa pemrograman dan sistem komputer. Implementasi stack dapat dilakukan menggunakan struktur data array atau linked list, yang dapat disesuaikan tergantung pada kebutuhan dan preferensi dalam penggunaan memori atau fleksibilitas
PENGERTIAN
Stack adalah sebuah struktur data yang digunakan untuk menyimpan sejumlah objek atau variabel. Karakteristik khas dari stack adalah penggunaan aturan LIFO (Last In, First Out), di mana data yang terakhir dimasukkan ke dalam stack akan menjadi data pertama yang diambil atau dikeluarkan. Stack sering digunakan dalam berbagai konteks pemrograman, seperti manajemen memori, pemanggilan fungsi, evaluasi ekspresi matematika, dan manajemen tumpukan panggilan saat melakukan rekursi
Ilustrasi
- Elemen stack yaitu item - item data di elemen stack
- Top (elemen puncak dari stack)
- Jumlah elemen pada stack
- Status / kondisi stack
- Penuh: bila elemen stack mencapai kapasitas maksimum. Pada kondisi ini tidak mungkin dilakukan penambahan ke stack. Penambahan elemen menyebabkan kodnisi kesalahan overlow
- 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 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 - OPERATOR DI DALAM STACK
OPERASI PUSH
Adalah operasi menambahkan elemn baru pada sebuah stack. Aturan penambahan stack
- Sebagai kondisi awal ada sebuah stack yang telah memiliki beberapa elemen dengan paling atas sebagai top.
- Dibuat sebuah elemen baru yang akan dimasukkan ke dalam stack
- Elemen baru dimasukkan kedalam stack.
- Penunjuk top pada stack diubah menunjuk ke elemen yang baru saja ditambahkan.
- Sebagai kondisi awal ada sebuah stack yang telah memiliki beberapa elemen dengan paling atas sebagai top.
- Penunjuk top diubah menjadi menunjuk elemen di bawah elemen atas
- Elemen atas diambil dari stack
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 sttack 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 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 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 kurun (matchin parentheses), dan juga berfungsi sebagai konversi dari notasi infix menjadi notasi postfix. Sebuah kompilator mempunyai tugas, salah satu di antaranya adalah menyelidiki apakah pemrograman telah dengan cermat mengikuti aturan tata bahasa, atau sintaks dari bahasa pemrograman yang bersangkutan. Misalnya untuk paranthes 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 suatu ekspesi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah:
- Elemen - elemen suatu ekspresi aritmetik (string) di Scan dari kiri ke kanan
- Jika ditemukan simbol "(" atau "Left Parentehsis", maka simbol tersebut di push ke dalam stack
- Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa.
- Jika stack kosong terjadi kesalahan.
- berarti: ada simbol ")", tetapi tida ada simbol"(" yang seharusnya mendahului.
- Jika stack tidak kosong artinya ada pasangannya dan langsung di-POP keluar stack.
- Jika derajatnya setara atau lebih rendah dari simbol yang berada pada 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 pada posisi top, maka simbol (operator) yang di - scan tersebut di - push ke dalam stack.
- ((A + B) * C / D + E ^ F) / G;
- ((A * B) + C / D - E * F) * G;
FUNGSI IsFull
- Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh
- Isikan nilai baru ke stack berdasarkan indeks TOP of STACK setelah ditambah satu (diincrement)
- Ambil dahulu nilai elemen teratas stack dengan mengakses TOP of STACK.
- Tampilan nilai yang akan diambil.
- Lakukan decrement nilai TOP of STACK sehingga jumlah elemen stack berkurang 1


Komentar
Posting Komentar