Struktur Data dan Algoritma

dokumen-dokumen yang mirip
IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

Review. Struktur Data & Algoritme (Data Structures & Algorithms) Objectives. Outline. Stacks & Queues

Struktur Data & Algoritme (Data Structures & Algorithms)

Jika Anda ingin bisa/sukses dalam kuliah SDA ini, rajinlah mengimplementasikan ADT dan mengerjakan soal-soal yang diberikan.

KUM 5 IMPLEMENTASI QUEUE

Algoritma Dan Struktur Data II. Queue

ALGORITMA DAN STRUKTUR DATA ARRAY STACK DAN QUEUE

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Struktur Data & Algoritma

TIF 4201 Algoritma Dan Struktur Data

*Sekumpulan elemen yang diatur secara terurut. *Linear List tidak sama dengan Connected-List

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

Algoritma Dan Struktur Data II

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

Pertemuan 7. REVIEW dan QUIS

Stack. Gambar 1.1 Stack

QUEUE (ANTREAN) Pertemuan 6 PENGERTIAN QUEUE (ANTREAN)

Struktur Data Array. Rijal Fadilah S.Si

Algoritma dan Struktur Data STACK

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA QUEUE

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

Sorting. Struktur Data dan Algoritma. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI

Struktur Data dan Algoritma

Struktur Data & Algoritma

Algoritma Pemrograman & Struktur Data

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatika

BAB III QUEUE (ANTRIAN)

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

ARNA FARIZA YULIANA SETIOWATI

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

Algoritma dan Struktur Data. Queue

Algoritma dan Struktur Data. Ramos Somya

S T A C K ( T U M P U K A N )

Pendahuluan Struktur Data. Nisa ul Hafidhoh

KUM 3 IMPLEMENTASI LIST

LAPORAN PRAKTIKUM RESMI QUEUE

Struktur Data dan Algoritma

PRAKTIKUM STRUKTUR DATA QUEUE. SULIDAR FITRI, M.Sc

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Queue.

IKI 20100: Struktur Data & Algoritma

Politeknik Elektronika Negeri Surabaya

BAB 3 STACK (TUMPUKAN)

Struktur Data dan Algoritma

IKI 20100: Struktur Data & Algoritma

Modul Praktikum Algoritma dan Struktur Data

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 2)

DIG1G3 Implementasi Struktur Data

Implementasi Queue menggunakan Array. Imam Fahrur Rozi

Algoritma Dan Struktur Data II

LOGO STRUKTUR DATA QUEUE

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

QUEUE (ANTRIAN) Struktur Data - Queue

MODUL IV STACK A. TUJUAN

STACK dan QUEUE MODUL PRAKTIKUM STRUKTUR DATA 09 UNIVERSITAS KRISTEN DUTA WACANA. Daftar Isi: Stack dan Queue. Latihan soal. Guided.

Praktikum Stack. A. Stack Collection di java.util.collection. Percobaan 1. Percobaan 2. import java.util.iterator; import java.util.

QUEUE (ANTREAN) Operasi Antrean : FIFO (First In First Out) Elemen yang pertama masuk merupakan elemen yang pertama keluar.

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

SILABUS STRUKTUR DATA ( TIF-104 ) PROGRAM STUDI TEKNIK INFORMATIKA UNIVERSITAS PEMBANGUNAN JAYA TANGERANG SELATAN

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

BAB IV Antrian(Queue)

BAB II STACK (TUMPUKAN)

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

05. Double Linked List

BAB II STACK Atau TUMPUKAN

UJIAN AKHIR SEMESTER GANJIL 2005/2006 ALGORITMA & STRUKTUR DATA / CS2014

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

Algoritma Pemrograman [BS204]

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

# NINE Queue dengan Array

Tumpukan (Stack) Stack bersifat LIFO (Last In First Out) LIFO Data yang terakhir masuk ke dalam stack menjadi data yang pertama keluar dari stack

SATUAN ACARA PENGAJARAN

STACK (Tumpukan) Tumpukan Koin. Tumpukan Kotak

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 4 & 5

BAB 2 LANDASAN TEORI

(3) BAHAN KAJIAN (materi ajar)

S TA C K Sunu Wibirama

STACK/TUMPUKAN. R. Denny Ari Wibowo, S.Kom STMIK BINA NUSANTARA JAYA LUBUKLINGGAU

IMPLEMENTASI STRUKTUR DATA LIST, QUEUE DAN STACK DALAM JAVA

Linked List dan Implementasinya dalam Bahasa Java

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

STACK ATAU TUMPUKAN 3.1 DAFTAR LINEAR

MODUL PEMROGRAMAN 2. Queue (Antrian)

1. Kompetensi Mengenal dan memahami struktur data Stack (tumpukan) dan Queue (antrian).

5. QUEUE (ANTRIAN) TUJUAN PRAKTIKUM

STRUKTUR DATA Pertemuan 1 s.d 8

Materi 9 : QUEUE (ANTREAN) Dosen:

A. TUJUAN PEMBELAJARAN 1. Memahami konsep dan operasi pada Stack. 2. Mampu mengimplementasikan struktur data Stack pada array dan List.

Arrays, Collections and Generics. Sisilia Thya Safitri, MT Agus Priyanto, MKom

ALGORITMA DAN STRUKTUR DATA

Stack. Pointer ke node pertama dari stack. Bagian deklarasi di atas kita asumsikan disimpan menjadi sebuah header file dengan nama stack.

ABSTRACT DATA TYPE (ADT) Dr. Taufik Fuadi Abidin, M.Tech Irvanizam Zamanhuri, M.Sc

Setelah mempelajari topik Analisis Algoritma di kuliah SDA, ada beberapa kompetensi yang perlu Anda kuasai:

KONSEP POINTER DAN LINKED LIST

STRUKTUR DATA Pertemuan 6

Outline STRUKTUR DATA. VII. Sorting

Transkripsi:

Struktur Data dan Algoritma Implementasi ADT: Stacks & Queues Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI SUR HMM AA Fasilkom UI - IKI20100/ IKI80110P 2009/2010 Ganjil Minggu 7

Outline ADT Stacks Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based ADT Queues Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based 2

Tujuan Memahami cara kerja dan kegunaan stack & queue Dapat mengimplementasi stack dan queue 3

Struktur data linear Kumpulan elemen yang tersusun sebagai garis linear Stack: struktur data linear di mana penambahan/pengurangan elemen dilakukan di satu ujung saja. Queue: struktur data linear di mana penambahan komponen dilakukan di satu ujung, sementara pengurangan dilakukan di ujung lain (yang satu lagi). Kedua struktur tersebut merupakan ADT di mana implementasi pada tingkat lebih rendah dapat sebagai list, baik menggunakan struktur sequential (array) atau struktur berkait (linear linked-list). 4

Stack Semua akses dibatasi pada elemen yang paling akhir disisipkan Operasi-operasi dasar: push, pop, top. Operasi-operasi dasar memiliki waktu yang konstan push pop, top Stack 5

Contoh-contoh di dunia luar komputer Tumpukan kertas Tumpukan tagihan Tumpukan piring Waktu O ( 1 ) per operasi stack. (Dengan kata lain, waktu konstan per operasi, tidak bergantung berapa banyak item yang tersimpan dalam stack). 6

Aplikasi-aplikasi Stack dapat digunakan untuk memeriksa pasangan tanda kurung (Balanced Symbol), pasangan-pasangan seperti {}, (), []. Misalnya: { [ ( ) ] } boleh, tapi { ( [ ) ] } tidak boleh (tidak dapat dilakukan dengan penghitungan simbol secara sederhana). Sebuah kurung tutup harus merupakan pasangan kurung buka yang paling terakhir ditemukan. Jadi, stack dapat membantu! 7

Balanced Symbol Algorithm Buat stack baru yang kosong. Secara berulang baca token-token; jika token adalah: Kurung buka, push token ke dalam stack Kurung tutup, maka If stack kosong, then laporkan error; else pop stack, dan periksa apakah simbol yang di-pop merupakan pasangannya (jika tidak laporkan error) Di akhir file, jika stack tidak kosong, laporkan error. 8

Contoh Input: {()} Push { Push ( ; lalu stack berisikan {, ( Pop; popped item adalah ( yang adalah pasangan dari ). Stack sekarang berisikan {. Pop; popped item adalah { yang adalah pasangan dari }. End of file; stack kosong, jadi input benar. 9

Performance Running time adalah O (N), yang mana N adalah jumlah data (jumlah token). Algoritma memproses input secara sikuensial, tidak perlu backtrack (mundur). 10

Call stack Kasus balanced symbol serupa dengan method call dan method return, karena saat terjadi suatu method return, ia kembali ke method aktif yang sebelumnya. Hal ini ditangani dengan call stack. Ide dasar: ketika suatu method call terjadi, simpan current state dalam stack. Saat return, kembalikan state dengan melakukan pop stack. 11

Aplikasi Lainnya Mengubah fungsi rekursif menjadi nonrekursif dapat dilakukan dengan stack. Lihat diskusi di forum rekursif mengenai maze runner, coba buat versi non-rekursif dengan bantuan stack. Operator precedence parsing (di kuliah berikutnya: TBA) Pembalikan urutan (reversing) dapat dengan mudah dilakukan dengan bantuan stack 12

Implementasi Array Stack dapat diimplementasi dengan suatu array dan suatu integer top yang mencatat indeks dalam array dari top of the stack. Untuk stack kosong maka top berharga -1. Saat terjadi push, lakukan dengan increment counter top, dan tulis ke dalam posisi top tsb dalam array. Saat terjadi pop, lakukan dengan decrement counter top. 13

Ilustrasi Push A top(-1) A Push B top(0) B A top(1) 14

Pertanyaan: Apa yang terjadi bila nilai top = ukuran array? 15

Array Doubling Jika stack full (karena semua posisi dalam array sudah terisi), kita dapat memperbesar array, menggunakan array doubling. Kita mengalokasi sebuah array baru dengan ukuran dua kali lipat semula, dan menyalin isi array yang lama ke yang baru: Benda[] oldarray = array; array = new Benda[oldArray.length * 2]; for (int j = 0; j < oldarray.length; j++) array[j] = oldarray[j]; 16

Pertanyaan: Dengan adanya array doubling apakah kompleksitas running time dari operasi push masih O(1)? Benda[] oldarray = array; array = new Benda[oldArray.length * 2]; for (int j = 0; j < oldarray.length; j++) array[j] = oldarray[j]; 17

Running Time Tanpa adanya array doubling, setiap operasi memiliki waktu konstan, dan tidak bergantung pada jumlah item di dalam stack. Dengan adanya array doubling, satu operasi push dapat (namun jarang) menjadi O(N). Namun, pada dasarnya adalah O(1) karena setiap array doubling yang memerlukan N assignments didahului oleh N/2 kali push yang non-doubling. Teknik Amortization (akan dipelajari lebih dalam pada kuliah DAA) 18

Stack Implementation: Array public class MyArrayStack<T> { private T[] array; private int topofstack; private static final int DEFAULT_CAPACITY = 10; } public MyArrayStack() public boolean isempty() public void makeempty() public T top() public void pop() public T topandpop() public void push(t x) private void doublearray() 19

Implementasi Linked-List Item pertama dalam list: top of stack (empty = null) push(benda x): Create sebuah node baru Sisipkan sebagai elemen pertama dalam list pop(): Memajukan top ke item kedua dalam list d c b a topofstack 20

Stack Implementation: Linked List public class MyLinkedListStack<T> { private ListNode<T> topofstack; } public MyLinkedListStack() public boolean isempty() public void makeempty() public T top() public void pop() public T topandpop() public void push(t x) 21

Queue Setiap akses dibatasi ke elemen yang paling terdahulu disisipkan Operasi-operasi dasar: enqueue, dequeue, getfront. Operasi-operasi dengan waktu konstan. Waktu operasi yang O(1) karena mirip dengan stack. enqueue Queue dequeue getfront 22

Contoh: Antrian printer Antrian tiket bioskop 23

Aplikasi-aplikasi Queue berguna untuk menyimpan pekerjaan yang tertunda. Kita kelak akan melihat beberapa contoh penggunaannya dalam kuliah-kuliah selanjutnya: Shortest paths problem Lihat diskusi di forum rekursif mengenai maze runner. Apakah ADT queue dapat membantu membuat versi non-rekursif yang memberikan jarak terpendek? Topological ordering: given a sequence of events, and pairs (a,b) indicating that event a MUST occur prior to b, provide a schedule. 24

Implementasi dengan Array cara naive Simpan item-item dalam suatu array dengan item terdepan pada index nol dan item terbelakang pada index back. Enqueue mudah & cepat: increment back. Dequeue tidak efisien: setiap elemen harus digeserkan ke depan. Akibatnya: waktu menjadi O(N). enqueue(x) enqueue(y) enqueue(z) dequeue() X X Y X Y Z Y Z back back back back 25

Ide yang lebih baik: Menggunakan front untuk mencatat index terdepan. Dequeue dilakukan dengan increment front. Waktu Dequeue tetap O(1). enqueue(x) enqueue(y) enqueue(z) X Y Z a b c d Front dequeue() Y Z Back a b c d dequeue() Z front back front Front back Back front back 26

Queue penuh? Apa yang terjadi bila index back = Array.length-1? Queue penuh? Perlukah dilakukan array doubling? Apa yang terjadi bila queue kemudian di enqueue, hingga index first = Array.length-1? Apakah queue penuh? Perlukan dilakukan array doubling? 27

Implementasi Array Circular Solusi: gunakan wraparound untuk menggunakan kembali sel-sel di awal array yang sudah kosong akibat dequeue. Jadi setelah increment, jika index front atau back keluar dari array maka ia kembali ke 0. P Q R T R S front back back front P Q R S T S back front back front T P Q R S T back front front back T Q R S back front 28

Latihan: Implementasi Array Circular Bagaimana implementasi dari: enqueue(); // menambahkan elemen pada queue dequeue(); // mengambil dan menghapus elemen isempty(); // apakah queue kosong? isfull(); // apakah queue sudah full? size(); //memberikan jumlah elemen dalam queue arraydoubling(); // memperbesar kapasitas array Kerjakan berpasangan. 29

Implementasi dengan Linked-List Simpan 2 reference: front back enqueue(benda x): Buat sebuah node baru N yang datanya x if queue sebelumnya empty, maka front = back = N else tambahkan N di akhir (dan update back) dequeue(): Hapus elemen pertama: front = front.next a b c d front back 30

Queue Implementation: Linked List public class MyLinkedListQueue<T> { private ListNode<T> front; private ListNode<T> back; } public MyLinkedListQueue() public boolean isempty() public void makeempty() public T getfront() public void dequeue() public T getfrontanddequeue() public void enqueue(t x) 31

Rangkuman Kedua versi, baik array maupun linked-list berjalan dengan O(1) Linked-list memiliki overhead akibat diperlukannya reference next pada setiap node Khusus untuk Queue, implementasi array lebih sulit dilakukan (secara circular) Memperbesar kapasitas dalam implementasi array (arraydoubling) memerlukan space sekurangnya 3x jumlah item data! 32