Algoritme dan Stuktur Data Kuliah #5 Stack / Tumpukan
Tujuan Instruksional Mahasiswa mampu : Memahami tentang konsep stack Mengetahui mekanisme pengoperasian sebuah stack Mengimplementasikan stack dengan array Mengimplementasikan stack dengan linked list
Topik Pengertian stack Operasi pada stack Implementasi stack dengan array Implementasi stack dengan linked list
Pengertian Stack (tumpukan) adalah struktur data dimana proses pengambilan dan penambahan element dilakukan pada satu ujung yang sama. Stack mengikuti konsep LIFO. LIFO (Last In First Out) : elemen yang terakhir kali masuk akan menjadi elemen yang pertama kali keluar. Stack dapat dibuat dengan menggunakan array maupun linked list.
Stack (Tumpukan) “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack
Ilustrasi Stack TV VCD Compo penambahan pengambilan Karena Compo ditumpuk di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena Televisi ditumpuk pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika dilakukan pengambilan elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo.
PUSH dan POP Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu : Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas). 2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack. 3. Pop dan push sama-sama dilakukan pada item yang terakhir kali ditambahkan pada stack. 4. Sedangkan pointer TOP akan menunjuk pada element yang paling atas (yang paling akhir ditambahkan) pada stack.
Proses Operasi Stack Contoh lain adalah ada sekumpulan perintah stack yaitu push(5), push(7), pop, push(3), pop, pop. Jika dijalankan, maka yang akan terjadi adalah :
Latihan Misal L adalah list linier. Gambarkan proses Stack untuk tiap operasi berikut dan tuliskan hasil akhirnya jika top menunjuk pada data f : L = {a,b,c,d,e,f} pop(); push(z); push(y); push(w);
Representasi Stack dalam Program Representasi stack dalam pemrograman, dapat dilakukan dengan 2 cara yaitu : 1. Representasi stack dengan array 2. Representasi stack dengan single linked list Banyak bahasa pemrograman yang tidak mempunyai type data stack secara built-in. Pemrogram harus memanipulasi sendiri untuk merepresentasikan stack. Yaitu dengan array dan single linked list. Array berbeda dengan stack: satu hal yang membedakan keduanya adalah banyaknya elemen stack dapat bertambah atau berkurang, sedangkan array elemnnya tetap.
Ilustrasi Stack dengan Array Representasi stack dengan menggunakan array dengan maksimal data 5 adalah
Ilustrasi Stack dengan Linked List Representasi stack dengan menggunakan single linked list
Pointer Top Digunakan untuk menunjuk element paling akhir yang dimasukkan kedalam stack. Jika top tidak menunjuk pada element manapun hal ini menunjukkan bahwa stack dalam kondisi kosong (empty). Pada array : top akan menyimpan index element paling akhir masuk. Pada linked list : top akan menyimpan alamat node yang paling akhir ditambahkan.
Operasi pada Stack Deklarasi Inisialisasi Cek kosong Cek penuh Penambahan Pengambilan Pengaksesan
(1) Deklarasi Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Karena stack dapat direpresentasikan dalam 2 cara, maka pendeklarasian stack pun ada 2 yaitu : a. Pendeklarasian stack yang menggunakan array. Suatu stack memiliki beberapa bagian yaitu top yang menunjuk posisi data terakhir (top) elemen yang berisi data yang ada dalam stack. Bagian ini lah yang berbentuk array. maks_elemen yaitu variable yang menunjuk maksimal banyaknya elemen dalam stack.
Deklarasi Stack dengan Array Dalam bahasa C, pendeklarasiannya adalah : #define maks 100 //pendeklarasian struktur stack struct tstack { int top; int maks_elemen; int elemen[maks]; }; //pendeklarasian stack tstack stack;
Deklarasi Stack dengan Array b. Pendeklarasian stack yang menggunakan single linked list Adapun stack yang menggunakan single linked list, hanya memerlukan suatu pointer yang menunjuk ke data terakhir. Setiap elemen linked list mempunyai 2 field yaitu elemen datanya dan pointer bawah yang menunjuk posisi terakhir sebelum proses push. typedef struct TStack *PStack; typedef struct TStack { int elemen; PStack bawah; }; // contoh pendeklarasian variable stack PStack stack;//variable stack akan selalu menunjuk top
(2) Inisialisasi Merupakan proses pemberian nilai awal. Pada Array : Pembentukan obyek array beserta ukurannya. tumpukan = new int[10]; (pembentukan obyek array yang memiliki 10 element, dan alamat obyek akan disimpan pada variabel bernama tumpukan) Pemberian nilai awal pada variabel top=-1. int top=-1;
Program Inisialisasi (Array)
(2) Inisialisasi...........(lanjutan) Pada Linked List: Proses inisialisasi dilakukan dengan memberikan nilai awal pada variabel head, tail dan top dengan nilai null. head = tail = top = null;
(3) Cek Kosong Operasi yang digunakan untuk mengecek kondisi stack dalam keadaan kosong. Caranya : melihat nilai top. Jika nilainya sama seperti ketika inisialisasi berarti stack dalam kondisi kosong (top =-1 atau top=null). Operasi ini harus dapat mengembalikan nilai true jika stack kosong dan false jika sebaliknya.
Program “isEmpty” (Array) Implementasi dalam bahasa C adalah : int isempty(tstack stack) { if (stack.top==-1) return 1; else return 0; } Jika top bernilai 0 atau top bernilai -1 maka berarti stack dalam keadaan empty (kosong) yang akan me-return-kan true (1) dan jika tidak berarti stack mempunyai isi dan me-return-kan nilai false (0)
Program “isEmpty” (Linked List) int isempty (PStack stack) { if (stack==NULL) return 1; else return 0; } Jika stack bernilai NULL maka menandakan stack sedang keadaan empty (kosong) dan akan me-return-kan nilai 1 dan jika tidak NULL maka menandakan stack mempunyai isi (tidak kosong) sehingga operasi tersebut akan me-return-kan nilai false (0).
(4) Cek Penuh (IsFull) Operasi yang hanya dapat diterapkan pada stack yang menggunakan array. Operasi ini digunakan untuk mengecek kondisi stack dalam keadaan penuh. Caranya : melihat nilai top. Jika nilai top sudah menunjuk n-1 (dimana n adalah ukuran array) maka dapat diindikasikan stack sudah dalam kondisi penuh. Kenapa? Operasi ini harus dapat mengembalikan nilai true jika stack penuh dan false jika sebaliknya.
Program “isFull” (Array) int isfull(tstack stack) { if (stack.top==(stack.maks_elemen-1)) return 1; else return 0; } Operasi ini akan memberikan nilai true (1) jika field top sama dengan field maks_elemen (untuk array yang elemennya dimulai dari posisi 1) atau top sama dengan maks_elemen-1 (unauk array yang elemennya dimulai dari posisi 0).
Program “isFull” (Linked List) int isfull() { PStack test; test=(PStack)malloc(sizeof(TStack)); if(test==NULL)//jika alokasi gagal return 1; else free(test); return 0; }