MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA) PRAKTIKUM PRAKTIKUM 3 IMPLEMENTASI LIST TUJUAN PEMBELAJARAN: 1. Mengimplementasikan struktur data LIST menggunakan array. 2. Menggunakan interface untuk mendefinisikan sekumpulan method generik dan dapat diimplementasikan oleh struktur data LIST. 3. Mampu mengimplementasikan struktur data list dengan single atau double linked list. PENGANTAR: List List merupakan sekumpulan elemen list yang bertype sama. Elemen list memiliki keterurutan tertentu (elemen ke..., ada pengertian suksesor dan predesesor). Setiap elemen(node) di dalam list memiliki elemen(node) suksesor(penerus) kecuali elemen terakhir, dan setiap elemen list memiliki predesesor(pendahulu) kecuali elemen pertama. Terdapat 2 jenis list yakni single list dan double list. Pengertian list diatas merupakan single list, Adapun double list merupakan list yang setiap node-nya memiliki predesesor dan suksesor. Dalam praktikum ini, kita akan membahas beberapa model implementasi struktur data list dengan menggunalan array dan linked list. Implementasi Array List Array memiliki batasan kapasitas. Salah satu karakteristik penting tipe array di java adalah bahwa ukuran array dapat diketahui dari pemanggilan data member length. Tidak seperti method length pada class String, length pada array merupakan data member, bukan sebuah method, sehingga tidak membutuhkan kurung kurawal untuk memanggilnya. Sebagai contoh, berikut deklarasi array: int scores = new int[10]; Setelah deklarasi diatas, nilai dari scores.length adalah 10. Perlu diketahui bahwa meskipun length bersifat public, nilainya tidak bisa diubah karena dideklarasikan sebagai konstan/final. Nilai valid untuk index array mulai dari 0 sampai dengan panjang array dikurangi satu. Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 1 MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA) Java secara aman menangani references invalid daripada index array. Percobaan untuk mengakses invalid index array akan menyebabkan program berhenti dengan eksepsi ArrayIndexOutOfBoundsException. Struktur data LIST memiliki sejumlah method yang harus dimiliki pada saat implementasi. Di java, salah satu pendekatan untuk mengidentifikasi common method yang dapat digunakan oleh bervariasi implementasi list adalah interface. Definisi sebuah interface hampir mirip dengan definisi class, tetapi: • • • • • Interface tidak dapat memiliki data member. Interface dapat memiliki konstan dan method public static final. Semua method otomatis abstrak, dan tidak memiliki bodi method. Semua method otomatis public. Interface tidak dapat diinstansiasi menjadi objek. Berikut contoh common method yang ada pada interface list.java interface List // Constants & Methods common to List ADTs { // Default maximum list size - a constant public static final int DEF_MAX_LIST_SIZE = 10; // List manipulation operations public void insert(Object newElement); // Insert Object public void remove( ); // Remove element at cursor public void replace (Object newElement); // Replace element public void clear( ); // Remove all elements from list // List status operations public boolean isEmpty( ); // Returns true if list is empty public boolean isFull( ); // Returns true if list is full } // interface List Setiap kelas yang mengimplementasikan List, diperlukan untuk menyediakan implementasi publik untuk setiap metode yang tercantum dalam interface. Java compiler akan menghasilkan kesalahan jika salah satu metode dalam interface tidak diberi definisi method. LANGKAH PERCOBAAN 1: Langkah 1 : Buat interface List (seperti di atas) dan simpan dalam file List.java dan kemudian dicompile. Langkah 2: Mengimplementasikan method yang terdapat pada interface List menggunakan array untuk menyimpan elemen list. Anda perlu menyimpan jumlah aktual elemen dalam list (size). class ListArray implements List // Array based list class { // Data Member Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 2 MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA) private int size, // Jumlah elemen di dalam list private Object [] element; // Tipe elemen Array // Konstruktor public ListArray( ) // Constructor: default size { } public ListArray(int maxNumber) // Constructor: specific size { } // Class methods private void setUp (int maxNumber) // Called by constructors only { } // ------ Insert method implementations for the interface list here -----// } // class ListArray Anda diminta untuk mengisi kode java untuk setiap konstruktor dan method yang diimplementasikan (kurung yang kosong), dan mengisi semua implementasi method yang ada di interface LIST. Langkah 2: Simpan implementasi list yang anda buat dengan nama ListArray.java Langkah 3: Buat class test untuk menguji implementasi list yang anda buat. Implementasi List dengan Single Linked List Single Linked list atau biasa disebut senarai berantai adalah suatu kumpulan data yang saling terhubung antar 1 data dengan data berikutnya. Suatu element (disebut dengan node) dalam linked list selalu mempunyai hubungan dengan data berikutnya. Agar lebih jelas perhatikan contoh berikut: Gambar 1. Contoh Single Linked List Dalam gambar1 di atas, terlihat bahwa ada 4 buah data. Setiap data mempunyai anggota yang menunjuk ke data berikutnya, kecuali elemen terakhir yang berisi NULL. NULL berarti bahwa elemen tersebut tidak menunjuk ke posisi apapun. Selain itu elemen pertama ditunjuk oleh variable Awal dan elemen terakhir ditunjuk oleh variable Akhir. Setiap elemen dari single linked list mempunyai 2 bagian yaitu bagian info (data) yang bernilai dengan angka, dan sebagian lagi adalah penunjuk ke data berikutnya (next). Untuk mengakses elemen dalam single linked list, dimulai dari head(awal) dan menggunakan field next dari elemen selanjutnya untuk berpindah dari elemen ke elemen berikutnya sampai elemen yang diminta dicapai. Dengan single linked list, list dapat dilintasi Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 3 MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA) hanya satu arah dari head ke tail karena masing-masing elemen tidak terdapat link dengan elemen sebelumnya. LANGKAH PERCOBAAN 2: Langkah 1: Implementasikan operasi-operasi yang ada di interface LIST dengan menggunakan single linked list. Setiap node di dalam linked list harus memiliki elemen list dan sebuah reference ke node yang memiliki elemen berikutnya dari list. // Facilitator class for the SList class class SListNode // A singly linked list node { // Data members private Object element; // List element private SListNode next; // Reference to the next element // Constructor SListNode(Object elem, SListNode nextPtr) { } // Class Methods used by client class SListNode getNext( ) // Return reference to next element { } SListNode setNext( SListNode nextVal ) // Set reference to next element & return that reference { } Object getElement( ) // Return the element in the current node { } void setElement(Object newElem) // Set current element to newElem { } } // class SListNode class SList implements List // Singly linked list implementation of the // List ADT { // Data members private SListNode head, // Reference to the beginning of the list // Constructors & Helper Method public SList( ) // Default constructor: Creates an empty list { } public SList( int size ) // Constructor: Creates an empty list, size is // ignored { } // Class methods private void setup( ) // Called by constructors only: Creates an empty list { } //- Insert method definitions for the interface List here -// } // class SList Anda diminta untuk mengisi kode java untuk setiap konstruktor dan method yang diimplementasikan (kurung yang kosong), dan mengisi semua implementasi method yang ada di interface LIST. Langkah 2 : Simpan kode anda pada file SlistNode.java dan SList.java Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 4 MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA) Langkah 3 : Buat class test untuk menguji list yang anda buat. SOAL POST TEST: Implementasikan List dengan menggunakan Double Linked List, dimana setiap node-nya memiliki suksesor(penerus/next) dan predesesor(pendahulu/prev). LAPORAN PRAKTIKUM BERISI PEMBAHASAN LATIHAN PERCOBAAN DAN SOAL. DIKUMPULKAN MINGGU DEPAN. Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 5