Linear Data Structures (Stack)

89
Linear Data Structures (Stack) Teknik Informatika - Universitas Muhammadiyah Malang (UMM) Tahun Akademik 2010-2011 Oleh : Nur Hayatin, S.ST

description

Linear Data Structures (Stack). Oleh : Nur Hayatin, S.ST. Teknik Informatika - Universitas Muhammadiyah Malang (UMM) Tahun Akademik 2010-2011. Sub Topik. Stack Operasi Stack Implementasi stack Latihan. STACK (Tumpukan). Definisi. Urutan elemen yang mengikuti konsep LIFO. - PowerPoint PPT Presentation

Transcript of Linear Data Structures (Stack)

Page 1: Linear Data Structures (Stack)

Linear Data Structures(Stack)

Teknik Informatika - Universitas Muhammadiyah Malang (UMM)Tahun Akademik 2010-2011

Oleh : Nur Hayatin, S.ST

Page 2: Linear Data Structures (Stack)

Sub Topik

• Stack• Operasi Stack• Implementasi stack• Latihan

Page 3: Linear Data Structures (Stack)

STACK(Tumpukan)

Page 4: Linear Data Structures (Stack)
Page 5: Linear Data Structures (Stack)

Definisi

• Urutan elemen yang mengikuti konsep LIFO.• LIFO (Last In First Out)• Add & remove dilakukan dari atas (top)

Page 6: Linear Data Structures (Stack)

Gambaran

bottom

top

C

A

B

D

E

F

bottom

top

C

A

B

D

E

Top : elemen paling atasBottom : elemen paling bawah

Page 7: Linear Data Structures (Stack)

Operasi Stack

Page 8: Linear Data Structures (Stack)

Operasi

• Pop (operasi pengambilan elemen)dilakukan pada elemen paling atas.

• Push (operasi penambahan elemen)dilakukan pada elemen paling atas.

• Top (operasi penunjuk data paling atas)untuk mengetahui stack dalam keadaan terisi atau kosong. Stack kosong jika top bernilai -1.

Page 9: Linear Data Structures (Stack)

Contoh

• Ada sekumpulan perintah stack yaitu 1. push(5) 2. push(7) 3. pop4. push(3) 5. popJika dijalankan, maka yang akan terjadi adalah :

-1 -1

0

1

0 0

1

0 0

Page 10: Linear Data Structures (Stack)

Latihan

1. Push(A), push(B), push(c), pop, pop, pop, push(D), push(E), pop, push(F), pop, pop.

2. Push(13), pop, push(14), push(15), pop, pop, push(16), push(17), pop, push(18), pop, push(19), pop, pop, push(20).

Page 11: Linear Data Structures (Stack)

Contoh Penerapan Stack

• Konversi Desimal ke Biner• Notasi Polish

Page 12: Linear Data Structures (Stack)

Class ArrayStack

Page 13: Linear Data Structures (Stack)

The Interface Stack

public interface Stack{ public boolean empty(); public Object peek(); public void push(Object theObject); public Object pop();}

Page 14: Linear Data Structures (Stack)

Inisialisasi Awal

public class ArrayStack implements Stack{ int top = -1; // current top of stack Object [] stack; // element array

Page 15: Linear Data Structures (Stack)

Constructor

public ArrayStack(int initialCapacity) { if (initialCapacity < 1) throw new IllegalArgumentException("initialCapacity must be >= 1"); stack = new Object [initialCapacity]; } public ArrayStack() {this(10);}

Page 16: Linear Data Structures (Stack)

Method empty()

public boolean empty() {

return top == -1; }

Page 17: Linear Data Structures (Stack)

Method peek()

public Object peek() { if (empty()) throw new EmptyStackException(); return stack[top]; }

Page 18: Linear Data Structures (Stack)

Method push()

public void push(Object theElement) { if (top != stack.length - 1) stack[++top] = theElement; }

Page 19: Linear Data Structures (Stack)

Method pop()

public Object pop() { if (empty()) throw new EmptyStackException(); Object topElement = stack[top]; stack[top] = null; // enable garbage collection top--; return topElement; }

Page 20: Linear Data Structures (Stack)

Method main()

public static void main(String [] args) { int x; ArrayStack s = new ArrayStack(3); // add a few elements s.push(new Integer(1)); s.push(new Integer(2)); s.push(new Integer(3)); s.push(new Integer(4)); // delete all elements while (!s.empty()) { System.out.println("Top element is " + s.peek()); System.out.println("Removed the element " + s.pop()); } } }

Page 21: Linear Data Structures (Stack)

Class LinkedStack

Page 22: Linear Data Structures (Stack)

Class ChainNodeclass ChainNode{ // package visible data members Object element; ChainNode next;

// package visible constructors ChainNode() {} ChainNode(Object element) {this.element = element;}

ChainNode(Object element, ChainNode next) {this.element = element; this.next = next;}}

Page 23: Linear Data Structures (Stack)

Inisialisasi Awal

public class LinkedStack implements Stack{ protected ChainNode topNode;

Page 24: Linear Data Structures (Stack)

Method isEmpty()

public boolean empty() {

return topNode == null; }

Page 25: Linear Data Structures (Stack)

Method peek()

public Object peek() { if (empty()) throw new EmptyStackException(); return topNode.element; }

Page 26: Linear Data Structures (Stack)

Method push()

public void push(Object theElement) {

topNode = new ChainNode(theElement, topNode); }

Page 27: Linear Data Structures (Stack)

Method pop()

public Object pop() { if (empty()) throw new EmptyStackException(); Object topElement = topNode.element; topNode = topNode.next; return topElement; }

Page 28: Linear Data Structures (Stack)

Method main()

public static void main(String [] args) { LinkedStack s = new LinkedStack(); s.push(new Integer(1)); s.push(new Integer(2)); s.push(new Integer(3)); s.push(new Integer(4)); while (!s.empty()) { System.out.println("Top element is " + s.peek()); System.out.println("Removed the element " + s.pop()); } } }

Page 29: Linear Data Structures (Stack)

Implementasi Stack(Notasi Polish)

Page 30: Linear Data Structures (Stack)

Notasi Polish (1)

• Menggubah notasi infix menjadi notasi postfix.

• Contoh :A+B (infix)AB+ (postfix)

Page 31: Linear Data Structures (Stack)

Algoritma

• Misal :Q = ekspresi matematika yang ditulis dalam notasi infixP = penampung ekspresi matematika dalam notasi postfix

Page 32: Linear Data Structures (Stack)

Algoritma1. Push tanda “(“ ke stack dan tambahkan tanda “)” di sentinel di Q. 2. Scan Q dari kiri ke kanan, kemudian ulangi langkah c s.d f untuk setiap

elemen Q sampai stack Q kosong. 3. Jika yang discan adalah operand, maka tambahkan ke P 4. Jika yang discan adalah “(“ maka push ke stack 5. Jika yang discan adalah “)” maka pop isi stack sampai ditemukan tanda

“(“, kemudian tambahkan ke P sedangkan tanda “(“ tidak disertakanke P. 6. Jika yang discan adalah operator, maka :

- Jika elemen paling atas dari stack adalah operator yang mempunyai tingkatan sama atau lebih tinggi dari operator yang discan, maka pop operator tsb dan tambahkan ke P. - Push operator tersebut ke stack.

7. Keluar

Page 33: Linear Data Structures (Stack)

Contoh

Q = A + ( B * C - ( D / E ^ F ) * G ) * H

Page 34: Linear Data Structures (Stack)

Penyelesaian

Q = A + ( B * C - ( D / E ^ F ) * G ) * H

>> setelah ditambahkan tanda “)” pada notasi sehingga terdapat 20 simbol sbb :

Page 35: Linear Data Structures (Stack)

Penyelesaian

Page 36: Linear Data Structures (Stack)

Penyelesaian

• Hasil akhir :Dari proses di atas didapatkan notasi postfix Q = ABC*DEF^/G*-H*+

Page 37: Linear Data Structures (Stack)

Notasi Polish (2)

• Menghitung ekspresi matematika yang disusun dalam notasi postfix.

• Contoh :2,5,* (postfix)Hasil : 10

Page 38: Linear Data Structures (Stack)

Algoritma

• Misal :P adalah ekspresi matematika yang ditulis dalam notasi postfix. variable value sebagai penampung hasil akhir.

Page 39: Linear Data Structures (Stack)

Algoritma

1. Tambahkan tanda “)” pada sentinel di P 2. Scan P dari kiri ke kanan, ulangi langkah c dan d untuk setiap

elemen P sampai ditemukan sentinel. 3. Jika yang discan adalah operand, maka push ke stack. 4. Jika yang discan adalah operator (sebut opr1), maka

Pop 1 buah elemen teratas dari stack, simpan dalam variable var1. Pop 1 buah elemen teratas dari stack, simpan dalam variable var2. Hitung variable (var2 opr1 var1), simpan hasil di variable hitung. Push variable hitung ke stack.

5. Pop isi stack dan simpan di variable value. 6. Keluar.

Page 40: Linear Data Structures (Stack)

Contoh Kasus

• P = 5, 2, 6, +, *, 12, 4, /, -

Page 41: Linear Data Structures (Stack)

Penyelesaian

• P = 5, 2, 6, +, *, 12, 4, /, -• Tambahkan tanda “)”pada sentinel P

sehingga P = 5, 2, 6, +, *, 12, 4, /, -, )

Didapatkan 10 simbol yaitu :

Page 42: Linear Data Structures (Stack)

Penyelesaian

Hasil : Didapatkan Bilangan 37

Page 43: Linear Data Structures (Stack)

Operator Priority

^ Pangkat, akar

/, * Pembagian, perkalian

+, - Penambahan, pengurangan

Page 44: Linear Data Structures (Stack)

Latihan

1. Ubah notasi infix berikut ke dalam bentuk notasi postfix :A+((B*C/D)-(E^F))M*(N^O)/P-(Q+R)(R*S+T)^U/(V-W+X)

Page 45: Linear Data Structures (Stack)

Latihan

2. Hitung ekspresi matematika berikut yang disusun dalam bentuk postfix :• 2,2,3,+,*,3,2,-,*• B,2,^, 4, –, a, *, c, *, 2, a, *, /, p, q, *, a, b, +, /, +

Page 46: Linear Data Structures (Stack)

QUEUE(Antrian)

Page 47: Linear Data Structures (Stack)

Definisi

• Urutan element yang mengikuti konsep FIFO.• FIFO(First In First Out)• Front digunakan untuk menunjuk pada

element yang paling atas. Nilai front selalu 0.• Rear digunakan untuk menunjuk pada

element yang paling belakang. Nilai awal rear adalah -1. Nilai rear akan berubah setiap kali ada operasi penambahan dan pengurangan element.

Page 48: Linear Data Structures (Stack)

Gambaran Proses

Front : DepanRear : Belakang

Page 49: Linear Data Structures (Stack)

Operasi Queue

Page 50: Linear Data Structures (Stack)

Operasi

• Enqueue/put (operasi penambahan elemen)

• Dequeue/remove (operasi penghapusan elemen)

• Get front (operasi pengaksesan elemen terdepan)

Page 51: Linear Data Structures (Stack)

Operasi Enqueue (add)

• Operasi penambahan elemen pada antrian.• Dilakukan di ujung belakang pada antrian.• Terjadi penambahan nilai (increment rear).

Page 52: Linear Data Structures (Stack)

Operasi Dequeue (remove)

• Operasi penghapusan elemen pada antrian.• Dilakukan di ujung depan pada antrian.• Terjadi pengurangan nilai (Decrement rear).

Page 53: Linear Data Structures (Stack)

Operasi Get Front

• Pengaksesan elemen yang paling depan.• Elemen yang ditunjuk oleh front.

Page 54: Linear Data Structures (Stack)

Contoh Penerapan Queue

• Antrian printer• Antrian tiket bioskop• Antrian nasabah bank

Page 55: Linear Data Structures (Stack)

Queue dalam Program

Page 56: Linear Data Structures (Stack)

The Interface Queue

public interface Queue{ public boolean isEmpty(); public Object getFrontEelement(); public Object getRearEelement(); public void put(Object theObject); public Object remove();}

Page 57: Linear Data Structures (Stack)

Class ArrayQueue

Page 58: Linear Data Structures (Stack)

Inisialisasi Awal

public class ArrayQueue implements Queue{ int front=0; int rear=-1; Object [] queue;

Page 59: Linear Data Structures (Stack)

Constructor

public ArrayQueue(int initialCapacity) { if (initialCapacity < 1) throw new IllegalArgumentException("initialCapacity must be >= 1"); queue = new Object [initialCapacity + 1]; } public ArrayQueue() { this(10);

}

Page 60: Linear Data Structures (Stack)

Method empty()

public boolean isEmpty() {

return rear == -1; }

Page 61: Linear Data Structures (Stack)

Method getFront()

public Object getFrontElement() { if (isEmpty()) return null; else return queue[front]; }

Page 62: Linear Data Structures (Stack)

Method getRear()

public Object getRearElement() { if (isEmpty()) return null; else return queue[rear]; }

Page 63: Linear Data Structures (Stack)

Method put()

public void put(Object theElement) { if (rear != queue.length - 1) { queue[++rear] = theElement; } }

Page 64: Linear Data Structures (Stack)

Method remove()

public Object remove() { if (isEmpty()) return null; Object frontElement = queue[front]; for(int i = 1;i<=rear; i++)

queue[i-1] = queue[i]; rear--; return frontElement; }

Page 65: Linear Data Structures (Stack)

Method main()public static void main(String [] args) { int x; ArrayQueue q = new ArrayQueue(3); q.put(new Integer(1)); q.put(new Integer(2)); q.put(new Integer(3)); q.put(new Integer(4)); q.remove(); q.remove(); q.put(new Integer(5)); q.put(new Integer(6)); q.put(new Integer(7)); q.put(new Integer(8)); q.put(new Integer(9)); q.put(new Integer(10)); q.put(new Integer(11)); q.put(new Integer(12)); while (!q.isEmpty()) { System.out.println("Rear element is " + q.getRearElement()); System.out.println("Front element is " + q.getFrontElement()); System.out.println("Removed the element " + q.remove()); } } }

Page 66: Linear Data Structures (Stack)

Class LinkedQueue

Page 67: Linear Data Structures (Stack)

Class ChainNodeclass ChainNode{ // package visible data members Object element; ChainNode next;

// package visible constructors ChainNode() {} ChainNode(Object element) {this.element = element;}

ChainNode(Object element, ChainNode next) {this.element = element; this.next = next;}}

Page 68: Linear Data Structures (Stack)

Inisialisasi Awal

public class LinkedQueue implements Queue{ protected ChainNode front; protected ChainNode rear;

Page 69: Linear Data Structures (Stack)

Method isEmpty()

public boolean isEmpty() {

return front == null; }

Page 70: Linear Data Structures (Stack)

Method getFront()

public Object getFrontElement() { if (isEmpty()) return null; else return front.element; }

Page 71: Linear Data Structures (Stack)

Method getRear()

public Object getRearElement() { if (isEmpty()) return null; else return rear.element; }

Page 72: Linear Data Structures (Stack)

Method put()

public void put(Object theElement) { ChainNode p = new ChainNode(theElement, null); if (front == null) front = p; // empty queue else rear.next = p; // nonempty queue rear = p; }

Page 73: Linear Data Structures (Stack)

Method remove()

public Object remove() { if (isEmpty()) return null; Object frontElement = front.element; front = front.next; if (isEmpty()) rear = null; // enable garbage collection return frontElement; }

Page 74: Linear Data Structures (Stack)

Method main()public static void main(String [] args) { int x; LinkedQueue q = new LinkedQueue(3); q.put(new Integer(1)); q.put(new Integer(2)); q.put(new Integer(3)); q.put(new Integer(4)); while (!q.isEmpty()) { System.out.println("Rear element is " + q.getRearElement()); System.out.println("Front element is " + q.getFrontElement()); System.out.println("Removed the element " + q.remove()); } } }

Page 75: Linear Data Structures (Stack)

QUEUE DENGAN CIRCULAR ARRAY

Page 76: Linear Data Structures (Stack)

Circular Array

• Mampu melakukan proses penghapusan elemen tanda melakukan pergeseran.

Page 77: Linear Data Structures (Stack)

Aturan Circular Array

1. Proses penghapusan dilakukan dengan cara nilai depan (front) ditambah 1 : depan=depan + 1.

2. Proses penambahan elemen sama dengan queue linear array yaitu nilai belakang ditambah 1 : belakang=belakang + 1.

3. Jika depan = maks dan ada elemen yang akan dihapus, maka nilai depan = 1.

4. Jika belakang = maks dan depan tidak 1 maka jika ada elemen yang akan ditambahkan, nilai belakang=1.

5. Jika hanya tinggal 1 elemen di queue (depan = belakang), dan akan dihapus maka depan diisi 0 dan belakang diisi dengan 0 (queue kosong).

Page 78: Linear Data Structures (Stack)

Circular Array

Page 79: Linear Data Structures (Stack)

Proses Circular Array

Page 80: Linear Data Structures (Stack)

Proses Circular Array

Page 81: Linear Data Structures (Stack)

Class CircularQueue

Page 82: Linear Data Structures (Stack)

Inisialisasi Awal

class CircularQueue{

private int maxSize;private int[] queArray;private int front;private int rear;private int nItems;

Page 83: Linear Data Structures (Stack)

Constructor

public CircularQueue(int s){

maxSize = s;queArray = new int[maxSize];front = 0;rear = -1;nItems = 0;

}

Page 84: Linear Data Structures (Stack)

Method isEmpty()

public boolean isEmpty(){

return (nItems==0);

}

Page 85: Linear Data Structures (Stack)

Method peekFront()

public int peekFront(){

return queArray[front];

}

Page 86: Linear Data Structures (Stack)

Method insert()

public void insert(int j){

if(rear == maxSize-1)rear = -1;

queArray[++rear] = j; nItems++;

}

Page 87: Linear Data Structures (Stack)

Method remove()

public int remove(){

int temp = queArray[front++]; if(front == maxSize)front = 0;nItems--; return temp;

}

Page 88: Linear Data Structures (Stack)

Method main()public static void main(String[] args){

CircularQueue theQueue = new CircularQueue(5); // queue holds 5 itemsSystem.out.println("front : " + theQueue.front + "rear : " + theQueue.rear);theQueue.insert(10); theQueue.insert(20);theQueue.insert(30); theQueue.insert(40);theQueue.remove(); System.out.println(“remove 1x, front : " +theQueue.front +" rear : " +theQueue.rear);theQueue.insert(50); theQueue.insert(60); System.out.println("add 2 elemen, front : " +theQueue.front+"rear:”+theQueue.rear);theQueue.remove();System.out.println(“remove 1x, front : " +theQueue.front+ “rear : " +theQueue.rear);while( !theQueue.isEmpty() ) {

int n = theQueue.remove();System.out.print(n);System.out.print(" ");

}

Page 89: Linear Data Structures (Stack)

Pustaka

• Sartaj Sahni, Presentation L5 & L10• Jokonowo, Bambang S.Si, “Pemrograman Berorientasi

Obyek”, Pusat pengembangan bahan ajar UMB, 2006.• Noviyanto, “Pemrograman Berorientasi Obyek (PBO) – Array”,

2005• Nugroho, Adi, “Algoritma dan Struktur Data Dalam Bahasa

Java”, ANDI Yogyakarta, 2008.• Michaell Waite, ”Data Structures and Algorithms in Java”,

SAMS, 2001