Anda di halaman 1dari 10

TUJUAN

1. Memahami konsep stack dan mengerti kegunaannya 2. Mengimplementasikan struktur stack dalam pemrograman 3.Mengidentifikasi permasalahan-permasalahan pemrograman diselesaikan dengan menggunakan stack dan menyelesaikannya.
Landasan teori Stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix). Ciri Stack : Elemen TOP (puncak) diketahui penyisipan dan penghapusan elemen selalu dilakukan di TOP LIFO (Last In First Out) Pemanfaatan Stack : Perhitungan ekspresi aritmatika (posfix) algoritma backtraking (runut balik) algoritma rekursif Operasi Stack yang biasanya : 1.Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen ke stack 2.Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemen stack 3.IsEmpty () 4.IsFull () 5.dan beberapas selektor yang lain Kita dapat menggunakan stack dengan 2 cara. Cara yang pertama adalah menuliskan program stack sendiri, kemudian melakukan manipulasinya. Sedangkan cara yang kedua adalah menggunakan class Stack yang terdapat pada utilitas import java.util.Stack.

yang

harus

Cara yang pertama jelas lebih panjang dan lebih sulit, karena kita harus menuliskan program untuk semua ketentuan stack. Sedangkan cara yang kedua jauh lebih mudah dan sederhana. Di bawah ini adalah contoh penggunaan utilitas stack yang sudah disediakan oleh Java. import java.util.Stack; public class StackSederhana1 { public static void main (String args[]) { Stack s = new Stack(); s.push(A); s.push(B); s.push(C); s.push(D); s.push(E); // menampilkan semua isi stack System.out.println(Isi stack sekarang adalah : + s); } } Untuk melakukan PUSH dan POP, kita tinggal menyebutkan variabel stack yang sudah dideklarasikan, dalam hal ini s dan diikuti oleh push data atau pop saja. import java.util.Stack; public class StackSederhana1 { public static void main (String args[]) { Stack s = new Stack(); s.push(A); s.push(B); s.push(C); s.push(D); s.push(E); // menampilkan semua isi stack System.out.println(Isi stack adalah : + s);

//mengambil dan menampilkan isi stack paling atas System.out.println(Elemen yang diambil adalah : + s.pop()); // menampilkan semua isi stack setelah elemen paling atas diambil System.out.println(Isi stack sekarang adalah : + s); } }

Permasalahan

Buatlah program stack Link List dengan input data berapa nomor NPM masing-masing mahasiswa dan tuliskan algoritmanya.

Pemecahan masalah
 Algoritma
1. Lakukan pemasukan elemen dalam ekspresi satu per satu 2. Bila elemen yang dimasukkan adalah operand, maka jadikan hasil saja, lanjutkan proses 1. Bila bukan operand, jalankan proses 3. 3. Bila stack dalam keadaan hampa, masukkan elemen tersebut dan lanjutkan proses 1. Bila tidak hampa, jalankan proses 4. 4. Bila elemen yang diperiksa adalah operator ')', keluarkan semua isi elemen (digabungkan dengan hasil sebelumnya) mulai TOP hingga'('. Abaikan (buang)operator '(' dan ')' dari hasil, karenapostfixtidak menggunakan mereka, lanjutkan proses 1. Bila bukan operator ')', jalankan proses 5. Bila elemen yang diperiksa memiliki tingkat derajat lebih kecil atau sama dengan TOP stack, keluarkan (digabung dengan hasil sebelumnya) TOP stack. TOP stack menjadi TOP - 1. Ulangi proses 5 ini sampai tingkat derajat yang ada di TOP stack kebih kecil, atauTOP stack berisi '(', atau stack dalam keadaan hampa, baru elemen tersebut dimasukkan. Lanjutkan proses 1 6. Bila elemen telah habis, keluarkan seluruh isi stack. Selesai.

 Source code
/* * NAMA * NPM */ package sda_prtkm_6; class item{ public String data; // data item public item next; // next node link in list public item prev; // previous node link in list public item(String id) // constructor {data = id; // initialize data } // set to null) public void tampilLink() // tampil ourself {System.out.print(data+" "); }} class StackLinkList :LOGIS FANROMIK :G1A010043

{private item top; private item bottom; public StackLinkList() // constructor {top = bottom = null;} public boolean isEmpty() // jika list bernilai kosong {return (top==null);} public void push(String id) { // make new link item newitem = new item(id); if (top == null) // item awal {top = bottom = newitem; // first > newLink } else // the second node and the next node //next dr top (awal) diarahkan ke node baru //prev dr node baru diarahkan ke tail (awal) //item baru selalu di top

{top.next = newitem; newitem.prev = top;

top = newitem; //top (baru) diarahkan ke node baru }} public item pop() // delete first item { item temp = null; if (top == null) // jika data kosong System.out.println("Stack is empty"); else if (top == bottom) //jika data hanya satu {temp = top; top = bottom = null;} else // jika data lebih dari satu

{temp = top; top = top.prev; top.next = null;}

return temp; }public void tampil() {item current = bottom; //mulai data awal while(current != null) {current.tampilLink(); // tampilkan data current = current.next;// memindahkan link }System.out.println(""); }} class StackLinkListApp {public static void main(String[] args) {StackLinkList NPM = new StackLinkList(); // membuat list baru System.out.println("STACK DENGAN LINK LIST"); NPM.push("G"); // memeasukan item NPM.push("1"); NPM.push("A"); NPM.push("0"); NPM.push("1"); NPM.push("0"); NPM.push("0"); NPM.push("4"); NPM.push("3"); System.out.println("LOGIS FANROMIK " + "\n NPM:"); NPM.tampil(); // tampil list System.out.println("HAPUS STACK "); while( !NPM.isEmpty() ) // npm sampai kosong {item aLink = NPM.pop(); // hapus link System.out.print("Hapus ");

aLink.tampilLink(); System.out.println(" "); NPM.tampil(); }NPM.tampil(); // tmpil list System.out.print("prose selesai");} // end main() }

 Penjelasan
class item{ public String data; // data item public item next; // next node link in list public item prev; // previous node link in list public item(String id) // constructor {data = id; // initialize data} Merupakan class awal pembuatan node next dan prev kemudian iniasialsasi menunjukkan data stack string. 2. public void tampilLink() {System.out.print(data+" "); Merupakan method untuk menampilkan data stack yang akan dipush 3. class StackLinkList {private item top; private item bottom; public StackLinkList() {top = bottom = null;} public boolean isEmpty() {return (top==null);} Merupakan clas stack yg merupakan method untuk mengulang top dan bottom dan pernyataan kondisi stack kosong maka top stack selesai 4. public void push(String id) { item newitem = new item(id); if (top == null) {top = bottom = newitem; } else {top.next = newitem; newitem.prev = top; top = newitem; }} merupakan method push atau penambahan data yang akan dipanggil diaplikasi stack nantinya. 5. public item pop() { item temp = null; if (top == null) System.out.println("Stack is empty"); else if (top == bottom) {temp = top; top = bottom = null;} else {temp = top;

top = top.prev; top.next = null;} return temp; merupakan method pop atau perintah untuk menghapus data stack yang akan di masukkan. 6. public void tampil() {item current = bottom; while(current != null) {current.tampilLink(); current = current.next; }System.out.println(""); }} Merupakan method yang akan menampilkan data stack yang akn dipush atau ditambahkan pada aplikasinya nanti.

OUTPUT

Tugas Pratikum Struktur Data dan Algoritma Stack dengan Link List

Logis Fanromik G1A010043 Dosen Ernawati, S.T, M.Cs Asisten Dosen: Siti Maulida Naima lubis Yudi Setiawan ,S.T (G1A007014) (GIA007023)

PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS BENGKULU

2011