modul - 3 stack

5
Modul pratikum untuk matakuliah Struktur Data dan Analisa Algoritma 1 Pengantar Stack, seringkali disebut sebagai tumpukan, adalah varian terbatas dari list yang mana elemen-elemen bisa dimasukkan dan dihapus hanya setelah (pada) elemen terakhir. Proses insert dilakukan setelah elemen terakhir dan proses remove dilakukan pada elemen terakhir. Dengan demikian, elemen yang paling akhir masuk akan diambil pertama, sehingga sifat proses pada stack ini sering disebut juga “Last-In, First-Out” (LIFO), suatu istilah yang sudah lama ada sebelum komputer ditemukan. Karena keterbatasan ini, penggunaan stack menjadi terbatas tetapi efisien dan mudah untuk diimplementasikan. Beberapa aplikasi memerlukan operasi/proses insert dan remove yang terbatas seperti yang ada pada stack, sehingga lebih menguntungkan menggunakan stack daripada menggunakan list secara umum. Sebagai contoh, penyimpanan data dan pemanggilan sub program dalam pemrograman (diantaranya menggunakan stack memori, yaitu memori yang digunakan untuk menyimpan variabel lokal sebuah fungsi), permasalahan rekursifitas dan evaluasi ekspresi dalam notasi polish (kalkulator tiruan) dan lain-lain. Dalam struktur data, elemen pertama dari sebuah stack biasa disebut sebagai top. Proses memasukkan elemen tidak disebut insert seperti dalam list, tetapi disebut dengan push, sedangkan proses penghapusan elemen dari stack disebut dengan pop. Seperti pada pembahasan tentang list, stack dapat diimplementasikan dengan dua pendekatan, yaitu pendekatan berbasis array (array-based stack) dan linked stack yang keduanya dapat dianalogikan sama dengan array-based list dan linked list. Stack – ADT public interface Stack<E> { /** Reinitialize the stack. */ public void clear(); /** Push an element onto the top of the stack. @param it Element being pushed onto the stack.*/ public void push(E it); /** Remove and return top element. @return The element at the top of the stack.*/ public E pop(); /** @return A copy of the top element. */ public E topValue(); /** @return Number of elements in the stack. */ public int length(); }; MODUL 6 Stack

Upload: rizky-rakhmawan

Post on 27-Nov-2015

19 views

Category:

Documents


2 download

DESCRIPTION

strukturdata

TRANSCRIPT

Page 1: Modul - 3 Stack

Modul pratikum untuk matakuliah Struktur Data dan Analisa Algoritma 1

Pengantar

Stack, seringkali disebut sebagai tumpukan, adalah varian terbatas dari list yangmana elemen-elemen bisa dimasukkan dan dihapus hanya setelah (pada) elemen terakhir.Proses insert dilakukan setelah elemen terakhir dan proses remove dilakukan padaelemen terakhir. Dengan demikian, elemen yang paling akhir masuk akan diambilpertama, sehingga sifat proses pada stack ini sering disebut juga “Last-In, First-Out”(LIFO), suatu istilah yang sudah lama ada sebelum komputer ditemukan. Karenaketerbatasan ini, penggunaan stack menjadi terbatas tetapi efisien dan mudah untukdiimplementasikan.

Beberapa aplikasi memerlukan operasi/proses insert dan remove yang terbatasseperti yang ada pada stack, sehingga lebih menguntungkan menggunakan stack daripadamenggunakan list secara umum. Sebagai contoh, penyimpanan data dan pemanggilan subprogram dalam pemrograman (diantaranya menggunakan stack memori, yaitu memoriyang digunakan untuk menyimpan variabel lokal sebuah fungsi), permasalahanrekursifitas dan evaluasi ekspresi dalam notasi polish (kalkulator tiruan) dan lain-lain.

Dalam struktur data, elemen pertama dari sebuah stack biasa disebut sebagai top.Proses memasukkan elemen tidak disebut insert seperti dalam list, tetapi disebut denganpush, sedangkan proses penghapusan elemen dari stack disebut dengan pop.

Seperti pada pembahasan tentang list, stack dapat diimplementasikan dengan duapendekatan, yaitu pendekatan berbasis array (array-based stack) dan linked stack yangkeduanya dapat dianalogikan sama dengan array-based list dan linked list.

Stack – ADT

public interface Stack<E> {/** Reinitialize the stack. */public void clear();

/** Push an element onto the top of the stack.@param it Element being pushed onto the stack.*/

public void push(E it);

/** Remove and return top element.@return The element at the top of the stack.*/

public E pop();

/** @return A copy of the top element. */public E topValue();

/** @return Number of elements in the stack. */public int length();

};

MODUL 6Stack

Page 2: Modul - 3 Stack

Modul pratikum untuk matakuliah Struktur Data dan Analisa Algoritma 2

Array-based StackSeperti dalam implementasi array-based list, listarray harus dideklarasikan

dengan ukuran yang tetap ketika stack di-create. Dalam fungsi konstruktor, atribut(variabel) sz menyatakan ukuran stack. Atribut top menyatakan indeks untuk elemen topyang mirip dengan atribut curr pada list.

Implementasi stack dengan array secara esensial adalah penyederhanaan dari listdengan array. Hal penting yang harus diperhatikan adalah menentukan dimana posisi topdari stack. Pilihan pertama adalah top pada posisi 0 dalam array. Jika ini yang dipilihmaka penambahan(push) dan penghapusan (pop) elemen terjadi di posisi 0. Dalamimplementasinya hal ini tidak efisien, sebab pada setiap proses push dan pop semuaelemen stack akan memerlukan proses pergeseran satu posisi untuk semua elemen,sehingga kompleksitasnya adalah Θ(n) jika teradapat n elemen dalam stack.

Pilihan yang lain adalah top berada pada posisi n-1 ketika terdapat n elemen dalamstack. Proses push elemen dalam stack akan terjadi pada elemen terakhir. Begitu puladengan fungsi anggota pop juga terjadi diakhir array. Dalam proses ini operasi push danpop menjadi sangat efisien, yaitu Θ(1). Tetapi, terdapat sedikit masalah jika stack dalamkeadaan kosong, apakah top berada pada posisi 0 atau meng-assignnya dengan -1misalnya. Untuk menangani permasalahan ini, diberikan alternatif lain yaitu dengan caramenempatkan top pada posisi kosong yang pertama pada listarray atau posisi yang ke-n jika terdapat n elemen dalam stack. Jadi, pada saat stack kosong, top berada pada posisipertama dan atribut top ini bisa juga menyatakan jumlah elemen yang ada dalam stacksaat ini. Elemen-elemen dalam stack disimpan dalam listarray[0]sampai denganlistarray[top-1].Sebagai contoh, berikut ini adalah stack yang berisi integer dengan jumlah elemen 10,sehingga top bernilai (pada posisi) 10.

top =103 12 11 23 40 15 7 18 20 250 1 2 3 4 5 6 7 8 9 10

Fungsi push secara sederhana akan menempatkan elemen pada posisi top dalamlistarray, kemudian meng-increment top. Fungsi pop akan akan men-decrement topkemudian menghapusnya. Program berikut merupakan implementasi class stack secaralengkap.

Page 3: Modul - 3 Stack

Modul pratikum untuk matakuliah Struktur Data dan Analisa Algoritma 3

Nama File: AStack.java

Praktikum1. Implementasikan Class AStack tersebut diatas, simpan sebagai file AStack.java

2. Untuk melakukan uji coba terhadap method yang telah dibuat, perlu dibuat“main program”. Implementasikan program utama yang akan memanfaatkanstack dan berikan contoh penggunaan operasi-operasi yang telahdiimplementasikan. (push, pop, clear, length, dll)

Page 4: Modul - 3 Stack

Modul pratikum untuk matakuliah Struktur Data dan Analisa Algoritma 4

Linked StackSeperti pada array-based stack, implementasi linked–stack merupakan penyederhanandari implementasi linked list dengan batasan proses insert dan remove elemen hanyadilakukan pada node yang ditunjuk oleh head (top). Header tidak diperlukan sebab tidakada kasus yang khusus yang memerlukannya. Data anggota top adalah sebuah pointer kesimpul link pertama dari stack.

Fungsi anggota push dilakukan dengan cara yang sederhana, seperti pada prosesinsert-first pada linked list, yaitu pertama kali melakukan modifikasi field next dari nodelink baru yang di-‘create’ menunjuk ke elemen top dari stack, kemudian memindahkan(men-set) top ke element yang baru. Sedangkan fungsi pop pertama kali menyimpan(dalam temp) nilai dari node top dan sebelum sebelum top diremove, ltemp menyimpanlink next dari top; kemudian men-set top dengan ltemp dan me-return nilai yang disimpandalam temp (isi elemen top yang lama).

Sebagai contoh, diberikan stack dengan tiga elemen yang digambarkan sebagai berikut :top

kemudian dilakukan push(1), maka stack menjadi :

top

Untuk stack yang sama, jika dilakukan pop, maka stack menjadi :

top

7 5 3

7 5 3

11

2

3

7 5 31

it=top.elemen()

2 top=top.next()

1. link<E> ltemp = new link<E>(it, null)2. ltemp.next() = top3. top = ltemp

size++ (size bertambah 1)

Atau secara ringkas ditulis:

top = new link<E>(it, top)size++

1. it = top.element()2. top = top.next()3. return it

size-- (size berkurang 1)

Page 5: Modul - 3 Stack

Modul pratikum untuk matakuliah Struktur Data dan Analisa Algoritma 5

Program berikut merupakan implementasi lengkap dari linked stack :

Nama File: LStack.java

Praktikum1. Implementasikan Class LStack tersebut diatas, simpan sebagai file LStack.java

2. Untuk melakukan uji coba terhadap method yang telah dibuat, perlu dibuat“main program”. Implementasikan program utama yang akan memanfaatkanstack dan berikan contoh penggunaan operasi-operasi yang telahdiimplementasikan. (push, pop, clear, length, dll)